Compare commits

...

1376 Commits
v1.1 ... v5.1

Author SHA1 Message Date
Matt Pass
9fffd73f13 Version 5.1 2015-06-26 13:48:53 +01:00
Matt Pass
24cd0f8f36 Change comment wording only 2015-06-26 13:41:34 +01:00
Matt Pass
1c79062baa Only if logged in consider going to donate screen
Can't redir with PHP as targetting window, so do with JS and exit after
die also.
2015-06-26 12:16:52 +01:00
Matt Pass
f31ddf3dec Text added for trial bar info 2015-06-26 12:15:27 +01:00
Matt Pass
76d9b6a860 Login no longer shows/animates the trial bar 2015-06-26 12:14:45 +01:00
Matt Pass
61bfeaa536 Editor area now shows trial bar
Onload of body animates the bar
2015-06-26 12:12:15 +01:00
Matt Pass
76421a4fd7 Trial bar styles moved to editor now 2015-06-26 12:10:27 +01:00
Matt Pass
3c370d8ec7 ino is now alias for C++ language 2015-06-26 08:55:36 +01:00
Matt Pass
13eff9ce40 New function to update last 10 list
Called when setting previous files, this manages the last 10 files
opened by rotating thru the list
2015-06-25 18:15:04 +01:00
Matt Pass
0ec7c5a8fc ID added as hook, remove line breaks, fix path
Also remove <br> and only PHP_EOL if not last item
2015-06-25 18:12:47 +01:00
Matt Pass
94e1c61b58 CTRL+G shortcut noted 2015-06-25 18:09:50 +01:00
Matt Pass
d6a21c9b71 Can now press CTRL+F and CTRL+G to go next/prev
5th param added to tell function we want to find previous, set as false
if not available
Work out find result position whichever direction we're travelling
Also actually find next/prev, don't select same instance on first
find/prev operation processed
Looparound cases for next/prev to cycle to start/end
Processes also set up to do the search cursor movement
CTRL+F and CTRL+G now combined function
2015-06-25 16:05:25 +01:00
Matt Pass
f2f9dc441e ID added as a hook for click event trigger later 2015-06-25 15:58:28 +01:00
Matt Pass
168d635ab8 initCanvasImage setup and hover zoom preview also
initCanvasImage function added to draw image on init and set
backgroundSize of floatingContainer
interactCanvasImage is new name for drawCanvasImage. Function also makes
zoom hover preview follow mouse pointer and move the backgroundPosition
of the image in that hover DIV
2 new events added to show/hide the hover DIV on mouse over the canvas
2015-06-25 13:40:25 +01:00
Matt Pass
ed4f8078a8 initCanvasImage first 2015-06-25 13:37:18 +01:00
Matt Pass
4691c7e2b0 initCanvasImage first, floatingContainer BG set 2015-06-25 13:36:34 +01:00
Matt Pass
7b99febba1 floatingContainer added and CSS class & pseudo set
DOM elem has an ID as a hook so we can target later
Class sets a 55px square block for a 11x11 grid of 5px squares, hidden
to begin with, also with border for contrast and image-rendering value
of pixelated, so we get sharp pixels squares at our 5x zoom
Pseudo class added, 3px square as it has a 1px border, positioned to sit
over the 6th square (centre) in our 11px square grid
2015-06-25 13:33:00 +01:00
Matt Pass
fe0436762c b, i, strong, em, li tag wrappers removed
Shortcut keys caused problems for various keyboard types/languages and
these are more style based HTML tags. Keeping to a simpler set of
structural and hyperlink tags only - div, span, p, a and h1-h3.
2015-06-25 11:20:22 +01:00
Matt Pass
7b4ba0008b Focus on Go to Line field is now CTRL+L 2015-06-25 11:02:04 +01:00
Matt Pass
1699a1ada7 Recursively rename child node elem attributes also 2015-06-25 10:53:52 +01:00
Matt Pass
55cccdecc9 Action diffs after 0ms and handle wrapped lines
Need to call updateDiffs after 0ms as char change hasn't yet registered
Add on the extra heights for wrapped lines per line number
2015-05-23 11:23:23 +01:00
Matt Pass
05996618d7 Use a value of 0 if timeStart not available 2015-05-22 19:41:13 +01:00
Matt Pass
9572394962 Global var and echo progress on creation 2015-05-22 19:15:04 +01:00
Matt Pass
2dc72de62b Needs to be enclosed in PHP tags 2015-05-22 19:14:48 +01:00
Matt Pass
379026143f Include params file & write it if it doesn't exist 2015-05-22 18:59:31 +01:00
Matt Pass
7cab1933df Include our new params file 2015-05-22 18:58:55 +01:00
Matt Pass
dcfd4f3ed2 System params file started
Contains value in var to use to output to a file
2015-05-22 18:58:44 +01:00
Matt Pass
7e633128cf log error info on that event and always clear queue 2015-05-22 18:30:56 +01:00
Matt Pass
48c42f0523 Set error info on bad filename
Also only do the next parts with a filename if no error by that point
2015-05-22 18:29:53 +01:00
Matt Pass
2521dafde1 Break into more if/elseif/else so can handle error 2015-05-09 09:42:21 +01:00
Matt Pass
db5348cd68 Escape apostrophes 2015-05-09 09:41:44 +01:00
Matt Pass
6881f9d79b Enhancements to XHR reponse
On readyState 4 (finished), output response to dev tools console if user
wants that. Then if status 200, display error info or doNext. If not
200, display error message and output object to console.
2015-05-09 09:29:17 +01:00
Matt Pass
4b8808f498 Error message for non 4/200 XHR response 2015-05-09 09:26:22 +01:00
Matt Pass
93b38b55d3 Set fileDirResOutput in top.ICEcoder
To determine what response output to provide to JS
2015-05-09 09:26:01 +01:00
Matt Pass
fe2391e6ad fileDirResOutput added and comments 2015-05-09 09:25:20 +01:00
Matt Pass
0c86f5718e Now establishing line number and goto on open 2015-05-03 18:30:22 +01:00
Matt Pass
53e0252afc Enhanced open+goto, own func & used to get remote 2015-05-03 18:29:47 +01:00
Matt Pass
55fe5e7199 loadingFile = false should end processes 2015-05-03 18:28:38 +01:00
Matt Pass
d92b35fe23 Merge pull request #562 from Atatoth/patch-1
Update updater.php
2015-05-03 17:09:40 +01:00
Konrad Kałowski
1ec27a4df9 Update updater.php
missing \ and ' on update
2015-05-03 13:06:11 +02:00
Matt Pass
c982c6d2c7 Needs Saving value swap order to match ice-coder.js 2015-05-03 08:26:50 +01:00
Matt Pass
330ec0d605 Version 5.0 2015-05-02 14:57:27 +01:00
Matt Pass
462ee75980 lockedNav tweaks
lockedNav moved to index.php so set by settings
If nav is unlocked, on init, set width to minFilesW, before setLayout()
Tweaked comments for isPathFolder for consistency
Set file locked state for contract/expand and only if a change has been
made
2015-05-02 14:15:02 +01:00
Matt Pass
0470231a37 lockedNav now set according to settings 2015-05-02 14:10:56 +01:00
Matt Pass
6f9c127c1b Revised info for side section of settings screen 2015-05-02 14:10:06 +01:00
Matt Pass
3facbe2de6 If no filemtime value use time 2015-05-02 14:09:38 +01:00
Matt Pass
ea49fed017 Better info on side, simpler generation of list 2015-05-02 14:09:09 +01:00
Matt Pass
166b5e34b9 Renamed file 2015-05-02 14:08:15 +01:00
Matt Pass
e52998079b Removed debounce from autocomplete
CodeMirror race condition issues resolve so this is no longer needed.
Dropped from 200ms to 0ms if we uncomment in future to avoid lag.
2015-05-02 09:32:15 +01:00
Matt Pass
863f13d3cf Autocomplete is now on keypress by default 2015-05-02 09:30:25 +01:00
Matt Pass
f2b4535d31 Set/clear diffs on pane change, plus case catching
Clear diff marks when going to a single pane, do if going to split pane
Fallback to blank string on mainText and diffText
Also only clear marks and do diff highlighting if we have a cM instance
2015-04-29 09:01:11 +01:00
Matt Pass
5695d2c3c7 Tooltips clearer and using blue standard color 2015-04-29 08:57:29 +01:00
Matt Pass
879feca2ce Pull action available soon 2015-04-29 08:57:09 +01:00
Matt Pass
4ee4ab9247 Usage tooltips added for 2 x paths, with CSS also 2015-04-29 08:56:56 +01:00
Matt Pass
af86a93993 app/XML files are OK here also 2015-04-29 08:55:48 +01:00
Matt Pass
343c07c238 Replace \ with / in path to check 2015-04-27 16:54:42 +01:00
Matt Pass
7fd08afe14 3 x activeLineBG types setup now
Usage depends on theme selected
2015-04-27 16:17:19 +01:00
Matt Pass
6117145239 Text placeholder tweaks and additions 2015-04-27 16:15:41 +01:00
Matt Pass
1403136d0e Copyright tweaks
Copyright ICEcoder Ltd and also display more relevant details
2015-04-27 16:15:10 +01:00
Matt Pass
fc0a994b6b 3 x activeline colors, h2 back in, info class added
3 types of active line color, usage depends on theme
h2 mistakenly removed, added back in
info class added and used re devMode
2015-04-27 16:14:35 +01:00
Matt Pass
9712c369c1 Check 2 x POST vars are set before considering 2015-04-27 16:13:15 +01:00
Matt Pass
85a9cfaecd Set $filemtime if not set, need to use in JSON 2015-04-27 16:12:44 +01:00
Matt Pass
c34b2608cc English placeholder tweaks/additions 2015-04-27 16:12:09 +01:00
Matt Pass
ad30ff3c45 Only include index.php in backups and plugins dirs 2015-04-27 16:11:23 +01:00
Matt Pass
74355c0d00 Drop .gitkeep, use index.php for redirects
Avoids potentially exposing dir contents
2015-04-27 16:10:43 +01:00
Matt Pass
208897b040 Temp tweaks to get working, investigate more!
Need to clear the serverQueue, seemingly because the load process
doesn't clear the queue in time? This would be quite a big thing as we
need to be able to have a batch of commands and run them without sync
issues. To investigate,
The if condition check needs to now deduct 1 from the changeGeneration?
Why is this?
Also display test complete when finished.
2015-04-25 17:34:38 +01:00
Matt Pass
8d6c58af36 Demo/big arrow removed 2015-04-25 17:09:48 +01:00
Matt Pass
12e6bedf6d CodeMirror dir renamed to just that
Dropped version number so we can see cleaner commit changes in future
2015-04-25 15:12:47 +01:00
Matt Pass
0cb99eb48f 2 x CodeMirror files (JS and CSS) 2015-04-25 15:08:34 +01:00
Matt Pass
45ec256d4f CodeMirror theme changes 2015-04-25 15:06:46 +01:00
Matt Pass
04fa37a358 Retain existing perms on upload or set newFilePerms 2015-04-25 13:31:07 +01:00
Matt Pass
c21d57e36e Don't include $iceRoot in comparison 2015-04-25 12:24:57 +01:00
Matt Pass
de5e759ac9 Be more specific about dir being excluded
Only exclude actual dir ICEcoder is running from
2015-04-25 12:20:24 +01:00
Matt Pass
bb1c047ece Update to match main JS file 2015-04-25 12:00:48 +01:00
Matt Pass
67d44e56bb Don't set cookie_path or use strict mode
Using cookie_path on IE has an issue and causes session, then CSRF
issues
Stop using strict_mode as causes a problem on some setups
Add notes to these and httponly re IE and PHP version
2015-04-25 11:53:53 +01:00
Matt Pass
c7c984f66a Use top.ICEcoder.filesFrame in instances
IE has trouble selecting DOM node otherwise
2015-04-25 11:52:26 +01:00
Matt Pass
d320bb7172 Format tweak only 2015-04-25 10:50:00 +01:00
Matt Pass
fb82ab881c Use ICEcoder.ask as confirm function 2015-04-25 10:49:50 +01:00
Matt Pass
366ad3257e font-size now set by user settings 2015-04-25 10:49:18 +01:00
Matt Pass
75de0f3a08 Simplified to nested ternarys, comment & ; tweak 2015-04-25 10:21:05 +01:00
Matt Pass
47f64bf874 Shuffle items around and style tweaks 2015-04-25 10:15:13 +01:00
Matt Pass
400ef8cfce Swap write order, better file check with alert 2015-04-25 10:14:34 +01:00
Matt Pass
797df35ffe Create config settings file on the fly
So we can update using PHP later
2015-04-25 10:13:45 +01:00
Matt Pass
551f3f248b Remove settings file, now created by settings.php
So PHP has rights to update it later (multiUser, enableRegistration for
now, more to come in the future likely).
2015-04-25 10:10:14 +01:00
Matt Pass
a2cf9483d6 Only add dir events if a dir, not file
(Matches commit made just after v5.0 beta release by andrey012, when
adding new dir/file using updateFileManager)
2015-04-25 06:44:09 +01:00
Matt Pass
77329e9119 Deselect value if cancelling focus
Amazingly, there is no deselect() as an opposite to select(). The nearest alternative seems to be setSelectionRange(0,0), but support is patchy. Most reliable solution is to set the value to itself.
2015-03-13 16:33:11 +00:00
Matt Pass
7faf1099b0 Focus again after 0ms tickover incase DOM wasn't ready 2015-03-13 16:23:15 +00:00
Matt Pass
8893a29bd3 Merge pull request #537 from andrey012/master
2 minor fixes - much awesomeness here! :-D Thanks @andrey012
2015-03-13 15:22:42 +00:00
Andrey Grinenko
669827653e handling another file+line case: "filename on 123" 2015-03-13 17:59:46 +03:00
Andrey Grinenko
c6058959e3 Merge branch 'master' of github.com:andrey012/ICEcoder 2015-03-13 16:07:03 +03:00
Andrey Grinenko
b3acb61201 ice-coder.min.js updated to get changes of previous commit 7d66f32e5b 2015-03-01 18:34:39 +03:00
Andrey Grinenko
7d66f32e5b allow opening files with name (... on line \d+) - open + goto line 2015-03-01 18:30:48 +03:00
Andrey Grinenko
0583f1ea1c make goToLine if filename contains line number and file is already opened 2015-02-25 02:59:50 +03:00
Andrey Grinenko
f278394346 When Esc is used within Find window - return to text editor 2015-02-24 18:12:51 +03:00
Andrey Grinenko
ba634bbeed fix to isPathFolder function 2015-02-23 01:51:56 +03:00
Andrey Grinenko
a488c19d61 Prompt when F5 (Ctrl-R) is pressed. It is common thing to refresh page after you have made some tweaks, and it is common thing to refresh wrong page and even although everything is saved and tabs will reopen - you will loose opened folders in fileManager and cursor positions in open files. So it's better to prompt anyway. 2015-02-23 01:31:12 +03:00
Andrey Grinenko
c1982279f4 use font from settings in both fileManager and Tabs - otherwise on high-density screens it is getting hard to work 2015-02-23 01:30:55 +03:00
Andrey Grinenko
ed6a9bb03c ask for confirmation before moving files by drag-drop - it is too easy to move files by an accident 2015-02-22 19:23:16 +03:00
Andrey Grinenko
4d7ac54e6b detect whether an item in folder list is file or folder depending on its <a> item class, rather then the fact, that it has a dot in its name (I have lots of folders named like example.com which were treated as files) 2015-02-22 19:19:37 +03:00
Andrey Grinenko
fac5bf8662 session fixation fix - previous version did not let me in, because it regenerated session before even trying to start old one and check whether it is valid or not.
I've also added session regeneration on login, which is good practice to prevent session fixation.
2015-02-22 19:19:19 +03:00
Andrey Grinenko
8f1cca087b session fixation fix - previous version did not let me in, because it regenerated session before even trying to start old one and check whether it is valid or not.
I've also added session regeneration on login, which is good practice to prevent session fixation.
2015-02-21 02:58:44 +03:00
Andrey Grinenko
d826469c49 Merge branch 'master' of git://github.com/mattpass/ICEcoder 2015-02-20 23:52:19 +03:00
Andrey Grinenko
878ceef2ec cosmetics - make comments little more readable 2015-02-20 23:50:19 +03:00
Andrey Grinenko
e1a1b1b1cf minor tweaks:
treat XML as editable file
use htmlentities to escape textarea content
2015-02-20 23:49:54 +03:00
Andrey Grinenko
9f408abb34 allow Ctrl-O + enter filename with line number (captured from log or exception trace) - to go straight to the line 2015-02-20 23:49:02 +03:00
Andrey Grinenko
52d7d0819c indentAuto - make configurable 2015-02-20 23:40:47 +03:00
Matt Pass
46a0e62a84 Merge pull request #539 from unix4you2/master
Spanish language in settings-screen.php
2015-02-20 18:41:51 +00:00
John Arroyave
bd692990cb Spanish language in settings-screen.php 2015-02-19 07:05:26 -05:00
Matt Pass
9b7f0bd15a Merge pull request #538 from unix4you2/master
Spanish (ES) language by @unix4you2
2015-02-19 08:06:30 +00:00
John Arroyave
fcd1b4fb64 Spanish (ES) language by @unix4you2 2015-02-17 14:55:31 -05:00
Andrey Grinenko
c96c5cd12b 2 things about "Ctrl-F" find:
1. if there is some selection - in the code window - put it into the search box straight away
2. tweak for Chrome - somewhy it had problem with using Ctrl-F more then once
2015-02-17 09:15:15 +03:00
Andrey Grinenko
db3130f911 when Ctrl-F - select text in find text input in order to make user able to enter new text right away, without need to remove old text first 2015-02-16 14:01:11 +03:00
Andrey Grinenko
ae37460e92 Preserve line endings when editing existing file. 2015-02-16 13:18:32 +03:00
Andrey Grinenko
2e601a4ccc do not add openCloseDir onclick handler (which loads folder contents) for files. Files are not folders and this handler only causes problems overlapping with doubleClick handler sometimes. 2015-02-16 13:15:16 +03:00
Matt Pass
f76270b7b9 Version 5.0 beta 2015-02-08 14:59:55 +00:00
Matt Pass
694daa15aa v5.0 beta 2015-02-08 14:45:53 +00:00
Matt Pass
0d8cd9a612 Update to match main JS file 2015-02-08 14:41:04 +00:00
Matt Pass
2171dd5664 Remove old serverQueue line (dup), perms via XHR 2015-02-08 14:20:55 +00:00
Matt Pass
9a9d66ffb9 Perms now hanlded by XHR 2015-02-08 14:20:02 +00:00
Matt Pass
b5566c8382 Perms now handled by XHR 2015-02-08 14:19:49 +00:00
Matt Pass
385d4e0efd Escaping added 2015-01-30 20:56:34 +00:00
Matt Pass
8eeb64ad09 No need to pass fileRef in URL, passed in 3rd param 2015-01-30 08:10:04 +00:00
Matt Pass
caa9fab5b4 Don't change to lowercase here 2015-01-30 08:06:54 +00:00
Matt Pass
c087283e46 Unescape new linesuse $file now not fileRef
Also no old skool textarea replacement with custom string
2015-01-30 08:05:14 +00:00
Matt Pass
55f8b9adc2 Fix to path with | to / replacement 2015-01-30 07:22:12 +00:00
Matt Pass
9cb89463bb Missing ] 2015-01-26 09:10:23 +00:00
Matt Pass
3a48fd9cdd $docRoot not always available 2015-01-25 14:08:19 +00:00
Matt Pass
c4bba758c7 Get path from root plus up 1 dir 2015-01-25 14:04:20 +00:00
Matt Pass
db44da92f1 Syntax fix to output microtime correctly 2015-01-25 11:41:17 +00:00
Matt Pass
bedd75c0c5 Couple more replacements of " with ' 2015-01-25 11:34:16 +00:00
Matt Pass
c277d3a6bb Fix to microtime path with ' not " 2015-01-25 11:29:08 +00:00
Matt Pass
f681cc88c9 Portuguese (BR) contibution by @leonardoroese
Committed manually due to merge conflict issues
2015-01-23 09:24:59 +00:00
Matt Pass
c106c0a410 Merge pull request #527 from Nippey/patch-1
Fixed some spelling errors and translation of proper names to german.
2015-01-23 09:16:33 +00:00
Matt Pass
50a4a3e4bc Update to match main JS 2015-01-23 08:46:44 +00:00
Matt Pass
586a4e6a64 XHR used for all but load now
XHR now being used for many more functions, only load now remains to be
done
file value passed as 3rd param on serverQueue
moveFile() file param also has string replacing  / to | on filename
replaceInFile() fileRef param also passed as 3rd param, investigate!
If not saving prev files refs and not loading (ie, the extra functions
now covered by XHR), if we're saving, send contents with XHR request,
both send timeStart and file of course
2015-01-23 08:46:01 +00:00
Matt Pass
ef98e4f5ab More funcs moved to XHR setup, only load remains
New folder
Move file/folder
Rename file/folder
Paste file/folder
Upload file(s)
Delete file(s)/folders(s)
Replace text in a file
Get contents of remote URL
...all moved to XHR setup now!
2015-01-23 08:29:45 +00:00
Matt Pass
7f039d81d8 Microtime URLs to help stop caching and XHR upload 2015-01-23 08:26:08 +00:00
Matt Pass
ab39f9f51b Microtime this URL also to help stop caching 2015-01-23 08:25:25 +00:00
Matt Pass
47263bdbed Redone session params
No longer using session_start_safe() function because it caused more
usage problems than it solved. Setting a load of new params now to give
a much better setup.
2015-01-23 08:24:20 +00:00
Matt Pass
b65a7a690e Microtime all CSS and JS paths to help stop caching 2015-01-23 08:22:41 +00:00
Matt Pass
3dc26528b4 index.php placeholder, also boots user up a dir 2015-01-23 08:18:52 +00:00
Nippey
73305b3be2 Fixed some spelling errors and translation of proper names to german. 2015-01-19 11:21:11 +01:00
Matt Pass
de4c63c37e Change file type from UTF8 to ANSI
Contained BOM at start which caused issues with languages containing
extra chars (everything but English, Dutch and Norweigian).
2014-12-24 16:58:40 +00:00
Matt Pass
8b720dd0e6 Tweaks to new theme on green BG and text
More greenish background, green text is a better colour
2014-12-24 16:13:57 +00:00
Matt Pass
f0a2bbc531 New default theme and classic theme now option
Looks more sophisticated and less neon/eye popping
2014-12-16 08:41:24 +00:00
Matt Pass
c322c501ac previousFiles updated to only available files
Avoids ICEcoder asking to open files that are no longer available.
2014-12-15 15:36:40 +00:00
Matt Pass
5f948d9c56 Fix and improvements to saving and new tabs
newFile now just calls newTab but with 'alsoSave' param, which is picked
up and runs saveFile, giving more power to the API
When opening a file, if it's a new tab, call createNewTab with a 'new'
param, which is picked up and if set, we don't call setPreviousFiles. We
don't want to set them on adding a new tab anyway, plus it creates an
extra process, which means the server queue gets jammed and new tabs
don't get a save action processed.
2014-12-12 18:34:49 +00:00
Matt Pass
b2d13e0e30 Merge pull request #511 from AVGP/507-csrf-issue
Flexible Session handling
2014-12-01 18:56:07 +00:00
Martin Naumann
4a1ba5dfe3 Using reworked version from @mattpass 2014-12-01 19:44:21 +01:00
Martin Naumann
6861fa9ced Re-adding the session_cookie_params 2014-12-01 19:43:07 +01:00
Martin N.
29857e7d70 Using a custom session_start_safe
This fixes path issues, where the session directory ends up not writeable.
2014-12-01 16:45:49 +01:00
Martin N.
b50bc5e598 Merge pull request #1 from mattpass/master
update
2014-12-01 16:21:18 +01:00
Matt Pass
aaf1ce1526 Merge pull request #510 from AVGP/460-http-only-session-cookie
Using httpOnly session cookie
2014-12-01 12:19:45 +00:00
Martin Naumann
36b20938b7 Using httpOnly session cookie 2014-12-01 10:34:13 +01:00
Matt Pass
670e3c47a6 Don't match ICEcoder path to doc root use basename
The 2 x if conditions added a security measure to avoid path traversals,
should languageBase or languageUser ever be set to something malicious
such as (eg ../../../../../../../etc/passwd)

However, it meant that the ICEcoder dir and the doc root dir paths had
to both start the same, and so be in the same location really. It was
previously a benefit to have them possibly contain different paths, but
this security point restricts this.

We can remove these 2 if conditions however and simply wrap the 2 array
values with basename(), so we take only the trailing file name and so
avoid path traversal issues.
2014-11-27 20:48:28 +00:00
Matt Pass
4ef49f0172 Message is now thanking user, click to continue 2014-11-27 18:09:48 +00:00
Matt Pass
aef3340d0f Do pass thru param re updating
To be picked up and so run ICEcoder.updated() to display message
2014-11-27 18:09:01 +00:00
Matt Pass
3ea34fb87a Remove value from button 2014-11-27 18:08:18 +00:00
Matt Pass
efdf729f83 Mobile devices now initial scale 0.5, not scalable
Display at half the size of the desktop and by setting the property that
users can't scale, it means it doesn't shift position/scale etc on
keyboard popup. Not a perfect mobile solution (that's planned one day
soon), but far more usable now.
2014-11-27 09:13:25 +00:00
Matt Pass
5ce3a9912c Bad URL on logout and die to go no further
Location shouldn't contain the dirname of the file or a loggedOut param
(with no CSRF!) - all unnecessary and causes problems
Also add a die() after the header location to go no further.
2014-11-26 10:02:33 +00:00
Matt Pass
2897c75a3d Login screen fades in quickly
Same colour BG, fade in login screen after 50ms delay over 100ms
transition and trial bar begins animation quicker (150ms instead of
500ms)
2014-11-26 09:38:55 +00:00
Matt Pass
fe29a57cdb Only include this chunk if githubDIff is true 2014-11-26 09:36:41 +00:00
Matt Pass
f75bd9fe53 doNext is starting and replace Win line endings too 2014-11-26 09:35:51 +00:00
Matt Pass
a7c0123072 Slightly faster trial remaining bar anim 2014-11-26 09:35:03 +00:00
Matt Pass
3b84af75d2 Only use if we have text available and no caching
Caching may be causing files not to show in file manager occassionally
and dreaded ERR_CACHE_MISS notification being shown in Chrome currently
2014-11-26 09:34:41 +00:00
Matt Pass
505f5b35c7 Only use if we have text available & logout fix 2014-11-26 09:33:10 +00:00
Matt Pass
77c0f61d7b Only update value if index.php
Causes file locking issues if allowed to be called from anywhere
Because we only call from index.php now, also need dirname(___FILE___)
to complete paths
2014-11-25 09:49:53 +00:00
Matt Pass
8d5715ebcd Update configCreateDate if 0 and 14 full days
configCreateDate set if 0 now on every load, not just save
14 full days setup (1296000 - 1 sec), so doesn't start by showing 13
days (and 23 hrs, 59 secs)
If configCreateDate == 0, $tRemaining is the $tPeriod
2014-11-21 16:40:32 +00:00
Matt Pass
cab12fd73c More escaping needed to output to JS fine 2014-11-21 16:38:11 +00:00
Matt Pass
7acd53dd54 Version 4.5 2014-11-21 10:56:14 +00:00
Matt Pass
edbe8af62f User language can be selected from settings screen
If there has been a change of language, set a bool flag for a reload
later
Save languageUser to file also on settings update
realpath checking on language file name also, dies if fails
2014-11-18 15:35:41 +00:00
Matt Pass
6f50a23f3b User language available in JS var 2014-11-18 15:32:39 +00:00
Matt Pass
53e5a4e3cb language dropdown added
Languages worded in own language also
2014-11-18 15:32:22 +00:00
Matt Pass
b1ef03513c english.php set as the base and user language 2014-11-18 15:31:07 +00:00
Matt Pass
e8cc6c540a File updated by @koseelg see #466 2014-11-18 14:02:12 +00:00
Matt Pass
f137a95704 Merge pull request #492 from pietrondo/master
update italian.php
2014-11-18 13:58:25 +00:00
Matt Pass
453850a891 Add source, shiftSim, boxSelect, del adjustCursor
Remote menu option is now Source
Don't hard code or pass through the adjustCursor value
shiftSim param added so we can simulate a shift key just as we do with
ctrlSim
boxSelect function added so we can draw a box on drag in the file
manager and select files. Math.abs used to always return a positive
number
2014-11-18 13:50:21 +00:00
Matt Pass
b3e2b497ff Only action if there and 0.5s after load
Only input focus if we're not showing the trial screen, indicated by
lack of $_GET param
Only if trialBarRemaining is there should we adjust the bar length, now
also done 0.5 after load
2014-11-18 13:34:16 +00:00
Matt Pass
c8b1e573b5 Remote renamed Source and Settings moved
Settings moved to Edit section, makes more sense to be situated here
Localhost option added under Source, will indicate viewing local files
in future
2014-11-18 13:31:20 +00:00
Matt Pass
180d26f837 fmDragBox added and related classes and styles
On mouse down, up and drag, we now also call boxSelect function with
appropriate param
If we haven't just dragged a box select area, we can selectFileFolder on
click. If we have, set to false afterwards to reset
fmDragBox div added with no select properties and also added to body
2014-11-18 13:29:43 +00:00
Matt Pass
07117591e5 Can redirect to trial ended page if on login page
Would only redirect on fresh open otherwise
2014-11-18 13:23:20 +00:00
Matt Pass
d72c8a46d5 Improved commenting system
Simpler code and now able to easily add new language commenting syntax
plus tweaks & fixes
2014-11-18 13:22:32 +00:00
Matt Pass
a24d9fc8da Tweak to text and indent more/less added
Moved the tabs shortcut to right column to make space
2014-11-17 16:43:37 +00:00
Matt Pass
39541f4c81 Esc falls through to ICEcoder control now
If we have multiple selections, deselect to the primary selection only.
If we only have a single selection, then we comment/uncomment.

(Avoids having multiple selections, pressing Esc to clear to a single
and also unwantedly commenting/uncommenting).
2014-11-17 16:00:23 +00:00
Matt Pass
7fc5c23b50 Fixes to comment based on cursor pos
Identify CSS <style> blocks
Only if we didn't identify caretLocType and have a fileName do we go by
file extension
2014-11-17 15:20:41 +00:00
Matt Pass
edc9f858fc Animate trial remaining bar on load
Moved PHP calculations to settings.php to be with other trial related
code
2014-11-17 13:01:22 +00:00
Matt Pass
429fab5c17 Establish trial time, % and days remaining 2014-11-17 13:00:22 +00:00
Matt Pass
1c7d96a026 Width 170 and 1s transition added 2014-11-17 12:59:36 +00:00
Matt Pass
394a264ca9 Trial bar added to login/setup screen 2014-11-17 12:43:15 +00:00
Matt Pass
1a2a921753 No need to decode here really
Is decoded in file-control.php (and XHR version).
Min JS file updated to match current JS
2014-11-14 11:49:27 +00:00
Matt Pass
b650b64455 file now POST'd and can be sent to serverqueue 2014-11-14 11:43:37 +00:00
Matt Pass
d43278fbf7 Request, decode
REQUEST used as param may be over GET or POST (under XHR setup now) and
html_entity_decode it
fileURLPart is now fileURL and POST'd in XHR send, not part of URL to
get
2014-11-14 11:41:15 +00:00
Matt Pass
4a23fe12a3 Get file value from request and decode
file value now can be received from POST or GET (REQUEST), as we will be
passing in POST via XHR in future
html_entity_decode the value so we can have special chars
2014-11-14 11:35:31 +00:00
Matt Pass
2d45e6e297 Apply new JS value to updateDiffOnSave flag 2014-11-14 09:52:17 +00:00
Matt Pass
df685b308e updateDiffOnSave available in JS
Used in if statement to determine if we should do this or not
2014-11-14 09:50:44 +00:00
Matt Pass
2b44096c4e Setting for updateDiffOnSave
With this enabled (the default), saving a file will copy the main pane
value to the diff pane. This means you can see what changes you are
making prior to a save and also can undo changes in diff pane to see
save points and how they differ to the main pane.
2014-11-14 09:49:39 +00:00
Matt Pass
b5550d4ba8 New file path set/fix and diffs work with XHR now
newFileName needs docRoot also in path
statusArray is now statusObj
Recoding of diff handling code to work with new XHR setup and
improvements at same time re reducing use of textareas
2014-11-13 17:31:37 +00:00
Matt Pass
7e40f9c044 Save items removed, now handled by XHR 2014-11-13 17:25:47 +00:00
Matt Pass
add96dc9d2 Tidy up of XHR call on save
Var extra vars
saveURL value now just used in situ
statusArray is now statusObj
2014-11-13 17:25:21 +00:00
Matt Pass
5fe097a84a No longer console.log
We should indeed only output if index.php and top.iceRoot is updated
after a settings change in settings-update.php (top.docRoot only changes
if you manually change the file, in which case a reload is needed and
this is picked up again from scratch).
2014-11-13 14:33:47 +00:00
Matt Pass
0651eedf1e Set the timeEnd and timeTaken values also here 2014-11-13 14:23:07 +00:00
Matt Pass
f7089ec6ca Pass through timeStart also in new file XHR data 2014-11-13 14:11:58 +00:00
Matt Pass
2f66afa4e4 Time params on the action and URI encode content 2014-11-13 13:59:44 +00:00
Matt Pass
6e12da596c New XHR file started for file-control
Will eventually replace file-control.php. Carries out same file checks
etc, plus defines error info, form looparound system gone in place of
2nd XHR call on save as/new file save. All JS moved into a doNext string
to be run on success (no errors).

The only output here is the JSON response once we have carried out our
processes.

Note: Diff loading/MDT mismatch system not done yet.
2014-11-12 17:47:43 +00:00
Matt Pass
cf26b5b4e2 XHR and JSON now used when saving
First step towards replacing the old HTTP & form posting looparound
method, with a much more efficient XHR and JSON response system. For
now, only save uses this, load, delete, perms etc use old system until
save is stablised and fully tested.
Starts XHR call and when we have a response, if there's an error, show
that, otherwise, do the items listed in the doNext value.
2014-11-12 17:45:13 +00:00
Matt Pass
ebf12f327f Only set top.docRoot and top.iceRoot from index.php
Avoids having something output to the browser in places where we don't
want it, such as the new file-control-xhr.php file. Temporary
console.log for now as reminder to finish checking this out.
2014-11-12 17:40:27 +00:00
Pietro
34d0dec862 update italian.php
another update :-)
2014-11-12 18:22:01 +01:00
Matt Pass
24c6b870fc Altered wording to mention the write check 2014-11-10 09:29:23 +00:00
Matt Pass
860590214d Check old version is writeable before update
Checks all ICEcoder files are writeable and therefore moveable, before
proceeding with the update.
If it files any that aren't, it will display a message, list them and
die with a link back to ICEcoder.
Also ignoring .git dir
2014-11-10 09:27:13 +00:00
Matt Pass
1d69fabce2 ondrag over, if dir not expand or this, expand
Mean you can drag items to folders and they expand so you may drop to a
sub dir inside
2014-11-10 08:27:24 +00:00
Matt Pass
669d06a4c6 Remove rogue dup line (in if condition) 2014-11-10 07:56:55 +00:00
Matt Pass
ce38b126dc Set user defined perms on new file/dir 2014-11-10 07:23:09 +00:00
Matt Pass
18d66850fa New dirs/files use perms defined in config 2014-11-10 07:20:21 +00:00
Matt Pass
78a4a35b17 New dirs use newDirPerms setting 2014-11-10 07:17:14 +00:00
Matt Pass
e524012ec0 Refers to/uses 755 2014-11-10 07:16:42 +00:00
Matt Pass
3432f9c331 newDirPerms and newFilePerms available in JS now 2014-11-10 07:15:16 +00:00
Matt Pass
f1b090351a Settings added for newDirPerms and newFilePerms
Using recommended defaults for a typical web server
2014-11-10 07:14:00 +00:00
Pietro
2371455f45 Update italian.php 2014-11-08 10:03:06 +01:00
Matt Pass
27b2953d9d Also not draggable by default
Set on mouse over/out to avoid unexpected drags
2014-11-07 22:44:54 +00:00
Matt Pass
b90dbda803 Not draggable by default, toggled on mouse over/out
Avoids unexpected drags outside of icon & filename
2014-11-07 22:44:15 +00:00
Matt Pass
3d0625231f Fix to cursor height for wrapped lines
Avoids issue caused by for non diff height styled lines
2014-11-07 22:00:12 +00:00
Matt Pass
d66d41b17f Display plugins icon, clickable as toggle
Useful for those using mobiles, where the left edge isn't really
accessable
Also makes the plugins panel obvious for those on desktops
2014-11-07 21:35:27 +00:00
Matt Pass
741a2bcc93 GitHub icon needed extra 2px 2014-11-07 21:33:47 +00:00
Matt Pass
24c4409c12 Plugins icon added
Class added to CSS, plus GitHub icons move along 16px and down also
2014-11-07 21:27:26 +00:00
Matt Pass
94512c31dd Don't clear selectedFiles on chmod
This is unnecessary and we need this to also have a target to replace
perms on
2014-11-07 21:02:43 +00:00
Matt Pass
56d1f60675 Update perms BG color etc on change 2014-11-07 21:02:11 +00:00
Matt Pass
defc8d4ffa Revert back to not replacing with pipes
Not needed
2014-11-07 20:59:10 +00:00
Matt Pass
51661a41dd Files/dirs with 777 shown in red
The 777 perm is now shown with a red background (and white text) so it
stands out as a bad practise. May look to add a setting to turn this
on/off in future.
2014-11-07 20:28:16 +00:00
Matt Pass
1ffea52e69 Merge pull request #488 from pietrondo/master
Update italian.php
2014-11-05 09:03:34 +00:00
Pietro
0e64cbdc7f Update dutch.php
and work also dutch.php
2014-11-05 00:47:31 +01:00
Pietro
b77fc4d3bb Update italian.php
now it works!!
2014-11-05 00:46:58 +01:00
Pietro
1fce0da413 little error at first line.. 2014-11-04 17:42:44 +01:00
Pietro
5e1557171f Update italian.php
first italian version...
2014-11-04 16:59:17 +01:00
Matt Pass
35d1b01727 Trial period & handling added 2014-11-04 12:58:08 +00:00
Matt Pass
94310226b4 Login handles donate & code system 2014-11-04 12:56:36 +00:00
Matt Pass
af19a5b825 No longer prompted to donate on update 2014-11-04 12:56:16 +00:00
Matt Pass
aa939e2655 License email, code and config create date added 2014-11-04 12:55:58 +00:00
Matt Pass
cd96fe4326 Version 4.4 2014-10-31 15:16:06 +00:00
Matt Pass
eff7e7fa85 6 JS window.location fallbacks
On some servers the header request can be ignored, so have JS as a
fallback
2014-10-31 15:04:27 +00:00
Matt Pass
de1704a617 Slashed paths on message & start point for FM keys
Piped paths converted to slashes on chmod server message display
On up/down/left/right/Enter, if we have no file selected, select root as
a start point
2014-10-31 14:49:17 +00:00
Matt Pass
40a2db446a BG colour should be slightly darker 2014-10-31 14:44:46 +00:00
Matt Pass
bf997fba42 Call new function every 20ms after clicking name
Will check if the item we wanted to open is now the selected tab and if
so, change find/replace options to find in selected file and clear
interval
2014-10-31 14:41:37 +00:00
Matt Pass
e462633dab Shortut DIVs wider, key controls added 2014-10-31 14:38:21 +00:00
Matt Pass
760a90dadc Shortcut slightly wider 2014-10-31 14:37:04 +00:00
Matt Pass
bbac17a2b7 Remove BG colouring on hover, is misleading
Should indicate focus, not hover
2014-10-31 14:36:04 +00:00
Matt Pass
10f269734c Ignore all in /plugins dir 2014-10-31 14:34:22 +00:00
Matt Pass
b6baa39f0b Ignore all in /tmp dir
Other items may be stored in the future, not sure of naming convention
for session files etc. Better to ignore tmp/*
2014-10-31 13:06:45 +00:00
Matt Pass
2a4d75bf9d Only transition on BG and change on mouse over/out 2014-10-31 10:56:45 +00:00
Matt Pass
15bce56967 updated function added
Displays message ontop of black BG asking user to donate if they find
useful
2014-10-31 09:53:19 +00:00
Matt Pass
14f84ad668 Updating now returns to root with flag
To trigger new updated function
2014-10-31 09:52:44 +00:00
Matt Pass
cea9a4e299 fmAction added & code tweaked, alts & improvements
On init, select root dir
fmAction added to allow movement around file manager with
up,down,left,right and enter
load param in openCloseDir is now always the opposite of what it was
before. Function also removes node if it was UL, so we don't have hidden
elems still there
Refactored tag wrapper section
Added conditions to move between file and content areas
(CTRL+Alt+left/right)
Space is no longer the key to refocuson content area
2014-10-30 17:42:40 +00:00
Matt Pass
dff76a439d On load, focus on files after a 0ms tickover 2014-10-30 17:34:19 +00:00
Matt Pass
4751e1c24a Background transition, changes on focus/blur
To indicate which side has focus
2014-10-30 17:33:46 +00:00
Matt Pass
ec14772abd Shortcuts added to allow working with FM
Up/down = traverse up/down in current dir
Left = back up to parent dir
Right = open dir/select 1st item in dir/open file
Enter = expand/refresh dir or open file
2014-10-30 11:55:10 +00:00
Matt Pass
4f47e717e6 On load don't focus on editor pane
Want to retain focus on file manager incase we are using shortcuts to
open files etc
2014-10-30 11:42:19 +00:00
Matt Pass
41e3e1c821 Update to match main JS file 2014-10-29 17:32:03 +00:00
Matt Pass
5ec63bb973 Move resultsBar according to scroll pos & panes
scrollbarVisible now part of top.ICEcoder namespace
Placement of resultsBar done in setLayout now and takes splitpane into
account
On change we set scrollbarVisible and set layout again
2014-10-29 17:30:52 +00:00
Matt Pass
e05fc594b7 Nest display functions gone & code assist on diff
Lots of items removed as part of dropping this:

dontUpdateNest
dontSelect
htmlTagArray
startPosLine
startPosCh
cursorOrigCh
cursorOrigLine
nestDisplay
tagString

highlightBlock()
getNestLocation()
getNestLocationSub()
setPosition()

images/nest-tag-bg.gif

codeAssistToggle now working on diff pane also
2014-10-29 16:22:38 +00:00
Matt Pass
79669fe8c7 Removed nestDisplay div 2014-10-29 16:18:42 +00:00
Matt Pass
68078c028c Removed nestDisplay class 2014-10-29 16:18:31 +00:00
Matt Pass
fa2478f2f7 Remove getNestLocationSub function 2014-10-29 16:17:42 +00:00
Matt Pass
8c237d3551 Removing nesting indicator
It's a bit annoying when you hover over the tags, is only useful for
HTML/XML etc and ICEcoder covers many langs now plus clutters the
display a bit. Not so useful anymore.
2014-10-29 16:17:16 +00:00
Matt Pass
5ae9e0b92e Focus on correct pane on drag
Used by pasteURL function to drop URL in correct pane
2014-10-29 14:56:12 +00:00
Matt Pass
3258c45eb9 Action correct pane - file/dir drag & fold/unfold
Focus on last instance on file/dir drag - used by pasteURL to drop URL
in correct pane
Shortcut for fold/unfold line also needed to consider pane
2014-10-29 14:54:58 +00:00
Matt Pass
b797acea90 Set cursor height (is a % of line height)
cursorHeight is a number from 0 to 1, based on % of line height. As we
set line heights in diff mode and the default cursorHeight is 1, it
fills 100% of the height. this tweak ensures the cursor height is the
same as the text height.
2014-10-29 14:07:09 +00:00
Matt Pass
91f47a4e20 Inner line diff highlighting on replaced lines
Loops through all changed lines and marks 3 ranges for pre, on and post
change on those lines
Applies to both main and diff panes
2014-10-29 12:43:03 +00:00
Matt Pass
cfc4410275 Tweaks to diff classes and new one added
Green class has black text to make more visible
Grey class has darker background
New lighter grey class added for non changed portions of text on diff
line
2014-10-29 12:37:17 +00:00
Matt Pass
bc552d2d2f true param added to always get from server
This param forces it to get content from server, without this could
potentially get cached content
2014-10-29 10:23:17 +00:00
Matt Pass
30025333dd Set previewWindowLoading flag according to state 2014-10-29 10:16:26 +00:00
Matt Pass
5ac87ffbf7 Check on interval for load state, then add plugins 2014-10-29 10:11:05 +00:00
Matt Pass
a08586252a New flag added for previewWindowLoading 2014-10-29 10:10:30 +00:00
Matt Pass
d1e4404038 Update to match main JS file 2014-10-28 09:22:04 +00:00
Matt Pass
b235b40715 doStatsJS plugin runs after open and update events 2014-10-28 09:20:59 +00:00
Matt Pass
9b7d987d0b On save trigger doStatsJS after
Window content will reload, then append plugin afterwards
2014-10-28 09:19:34 +00:00
Matt Pass
5b88f7172b If stats.js plugin is available, load it 2014-10-28 09:16:05 +00:00
Matt Pass
4c5583e191 Escape apostrophes for JS 2014-10-28 09:14:29 +00:00
Matt Pass
bafe89a7f3 Also lint diff pane on JS/JSON mode 2014-10-27 16:27:36 +00:00
Matt Pass
1942b3143d Load JSHint plugin if available 2014-10-27 16:26:38 +00:00
Matt Pass
28d03e07b5 JSHint removed, now a plugin
It was a fairly big file and updating to the newer version would be
400k.
So, this has been done but is now an optional plugin.
2014-10-27 16:26:17 +00:00
Matt Pass
6579378e19 Reworked render line and diff functions
renderLineStyle is now an array of style arrays
cMonScroll function added to move scroll position of other pane to match
The on('renderLine') event now covers all lines, a change since earlier
versions of CodeMirror
This means a reworking of code was needed here to firstly identify a
matching pane and then if we have a match, add the style. Done in a for
loop and considers array items in renderLineStyle
Reworked much of the updateDiffs functin to reset array & value to begin
with and push to renderLineStyle array now. Also only doing this if we
have a height higher than normal to set, for perf reasons
No need to set renderLineStyle to false anymore
Finally, sorted the order things happen into 2 logical sections - main
pane changes first then diff pane changes after
2014-10-26 07:10:46 +00:00
Matt Pass
8a57b241bd On scroll trigger cMonScroll function
Contains mouseDown=false and also function to match scroll position on
both panes
2014-10-26 07:01:18 +00:00
Matt Pass
ff39f44569 Update to match main JS file 2014-10-24 16:54:29 +01:00
Matt Pass
9ea459787e Polyfill added for array_replace_recursive
This is natively available in PHP 5.3+
2014-10-24 09:23:52 +01:00
Matt Pass
084269bf35 JSON highlighting also & set lint: true if JS/JSON 2014-10-22 12:20:45 +01:00
Matt Pass
b601ea0e85 lintWith is now lint and false by default
This initialisation should be false to start with as we set PHP mode as
a basis and have no linter for that
We set the mode in processes/on-editor-load.php and then lint: true if
it's a JS mode.
2014-10-22 12:19:49 +01:00
Matt Pass
574e71f5e7 Ignore temp session files 2014-10-22 12:16:49 +01:00
Matt Pass
8189985a72 Upgrade to CodeMirror 4.7 2014-10-22 10:23:20 +01:00
Matt Pass
bfc1babb64 Fix to path used here, needs pipes? 2014-10-18 22:17:39 +01:00
Matt Pass
4edbf8d79d Now running custom processes for all actions 2014-10-18 22:17:17 +01:00
Matt Pass
f411370e32 New processes added
To cover all actions in file-control now
2014-10-18 22:16:43 +01:00
Matt Pass
2ea0ae8793 Die if not logged in to protect files
Avoids risk of them being run by visiting URL when not logged in
2014-10-18 21:09:32 +01:00
Matt Pass
ed08585867 Last 2 params need to be applied to function 2014-10-18 20:54:47 +01:00
Matt Pass
15eba478ac Slice 4 chars from end (for less and scss)
The char position used by $fileNameExtPos is actually from the
beginning, not end, so is useless here
However, we know that 'less' and 'scss' are 4 chars, so we can just
slice off those 4 chars always
2014-10-18 20:38:31 +01:00
Matt Pass
16da2d6a88 Update to match main JS file 2014-10-14 18:04:47 +01:00
Matt Pass
0b7120633d Text in 2 panes now lines up via renderLine event
renderLineStyle and renderPaneShiftAmount added to store info for
renderLine event
Function added for renderLine event, applies styles to line if we're
rendering that one
When updating diffs, run a loop to mark text according to it's status of
replace, delete or insert
Here we are also setting styles ready for the renderLine function and
clearing when done
This last part sets the height of the other pane, so lines of text line
up and make sense visually
Update on switching tab and using new settings
2014-10-14 17:53:34 +01:00
Matt Pass
14ab734c96 diffNone class and renderLine event added
diffNone added as an empty class to allow a line re-render as it's added
renderLine event added, passing vars onto function in JS file
2014-10-14 17:47:42 +01:00
Matt Pass
414e814de2 Establish paths & call github.php with read action 2014-10-11 15:20:15 +01:00
Matt Pass
d14fae9dd4 Read action to get contents & add to diff pane 2014-10-11 15:19:36 +01:00
Matt Pass
114b7e5d10 Set mode on both main & diff panes 2014-10-11 15:17:41 +01:00
Matt Pass
4c27e23d80 Split pane, new functions and diff mode set up
New vars for splitPane, debounce and editorFocusInstance added
Split pane controls added and center themselves and can now trigger
single and split pane views
Editor functions added here for focus, blur, onkeyup, oncursoractivity,
onchange and oninputread, can handle requests from either main or diff
pane
updateDiffs function added which will show differences between 2 panes
using jsdifflib and markText
updatePreviewWindow now it's own function too
Many functions redone so they can also take requests from either main or
diff panes, by using thisCM instead of cM
getcMdiffInstance function also added
Diff pane also updated on changing settings and switching tab
2014-10-11 13:12:57 +01:00
Matt Pass
fbd8475b6e Handling split panes on file control
If GitHub diff mode, load the 2 JS files needed
Ask message shown needed escaped slashes so they appear OK in dialog
No longer open a new file for older version, we display now in diff pane
Temp code added in comment block re getting content from GitHub for file
to show in diff pane. This isn't working at present and probably just
needs a tweak to make work
Slightly renamed vars for active lines to handle 2 panes
2014-10-11 13:01:44 +01:00
Matt Pass
d348191a37 Handling split panes
Establish panes and which one we are looking at when running these
functions
Note: May need to not do this for switchMode, as the diff pane should
fall in line with the main pane
2014-10-11 12:58:03 +01:00
Matt Pass
3958742c12 Implementing split pane
Tab lines now 0.15 opacity as a tweak
diff pane set to 50% width and add, remove and change diff classes added
cMOptions established as object to pass through when initialising editor
instances
Code related to initialising and adding actions to editor instance now
moved to main JS file and we are just about doubling everything up for
the diff pane
New events added for focus and blur also, with functions in main JS file
Active lines also created for diff pane
2014-10-11 12:55:10 +01:00
Matt Pass
0e11386448 On setting GitHub diff to true, go split pane also 2014-10-11 12:46:19 +01:00
Matt Pass
ee1d3cfcc0 Diff and split updates
If the diff instance doesn't have focus either then we can go next/prev
tab
Load difflib.js file also
Split pane controls added, with split view being opacity 0.5
2014-10-11 12:45:54 +01:00
Matt Pass
491191ebde results text moved, now used by JS file
Also reworded text re reloading so it relates to the diff pane
2014-10-11 12:44:08 +01:00
Matt Pass
bf44a2515e Split pane control classes added 2014-10-11 12:41:28 +01:00
Matt Pass
869d184939 Pull actions to be added in v4.4 now 2014-10-11 12:40:44 +01:00
Matt Pass
401568677e Lib added to establish text diffs 2014-10-11 12:40:18 +01:00
Matt Pass
ea7a697e7d Icon added for split pane controls 2014-10-11 12:40:01 +01:00
Matt Pass
a029eceb9d Set session_save_path & fix logout URL
Some hosts have a loop around issue with no session being available
after a header location redirect
After much research, I've found this is due to some hosts not having a
session save path and it needs to be set using PHP
Setting this means ICEcoder works on those few hosts
Fix to bad URL on logout
2014-09-29 10:55:46 +01:00
Matt Pass
7ef86360d8 Version 4.3 2014-09-26 15:32:28 +01:00
Matt Pass
746b133a9a Filetype identification fixes & improvements
Look to fileExt to determine the file type by extension rather than
string in fileName which is the path. This means .c isn't mistakenly
picked up in paths such as /httpdocs/mydomain.com/file.rb
Simplified code with 2 improved ternary statements
2014-09-26 14:38:59 +01:00
Matt Pass
c141fc2864 Selected text + tab = indent auto
Instead of single tabs
2014-09-26 12:44:06 +01:00
Matt Pass
cc5cd166be Only if no headers sent, set the 3 headers 2014-09-26 11:59:03 +01:00
Matt Pass
2409bc19c2 Compile Sass and LESS on save if plugins available 2014-09-24 12:28:59 +01:00
Matt Pass
297e482b11 Recursive only if githubDiff, no anim if > 50
Only include github.js if in githubDiff mode
Only do recursive dir loading if in gitHub diff mode
Move folderItems splitting out of loop to avoid unnecessary processing
showFiles now begins the process of displaying files - animated into
view (using setInterval) if less than 50 items, or shows immediately (by
setting showContent and skipping recursion) if more
showNextFile() is a function to actually display a file or if the end,
kick off the process of adding deleted files/dirs
2014-09-23 18:40:49 +01:00
Matt Pass
46c1bdce02 Fixes to allow new items to be created
Store original $file value in $fileOrig
rtrim [NEW] from the $file path as that is messing with realpath
checking
Move debugging alert and console.log line into the for loop and use
allFiles[$i]
If a local path and not the doc root or parent dir starts with the doc
root
Check on $fileOrig when saving as
2014-09-23 16:49:47 +01:00
Matt Pass
be74745318 Links added for info on 2 types of auth token 2014-09-18 18:08:05 +01:00
Matt Pass
cd2e2747c5 Max length of 50 chars added to title 2014-09-18 18:02:03 +01:00
Matt Pass
3a7e728871 No autocomplete on the GitHub auth input field 2014-09-18 17:51:14 +01:00
Matt Pass
3db00273dd Version 4.2 2014-09-18 16:09:10 +01:00
Matt Pass
e47b21ce80 Don't check paths if we're uploading 2014-09-18 16:07:39 +01:00
Matt Pass
7adefd1ff0 die() after header to stop going any further 2014-09-18 15:43:48 +01:00
Matt Pass
1276e894b5 File/folder message instead and go back 2014-09-18 15:40:03 +01:00
Matt Pass
9c90ffea43 Replace \ with / when comparing with $docRoot
Windows uses backslashes in realpath
2014-09-18 14:33:15 +01:00
Matt Pass
1ace4e4ed9 Need a greater timeout here
40ms wasn't enough to begin filling the list and so would report back
that there are no changes, when in fact, there are, just not shown yet
2014-09-18 14:16:00 +01:00
Matt Pass
cf8a214a24 Make all paths abs and check realpath on each 2014-09-18 13:02:40 +01:00
Matt Pass
24ea1b108f Establish realpath test begins with $docRoot or die
No need to str_replace ../, as that isn't real protection, use realpath
instead
Always turn into a real path (we'll only pass relative paths here
anyway), and change \ to / on Windows setups
Only if file exists and begins with the root path do anything, die
otherwise
2014-09-18 10:57:41 +01:00
Matt Pass
3b0a00af02 Need to establish full $file path first
Otherwise we won't have a valid fullpath to find $docRoot in
2014-09-18 10:47:57 +01:00
Matt Pass
2ad6f7fbc8 base64.js not needed
Only needed for basic auth and we are using oauth tokens
2014-09-18 09:27:24 +01:00
Matt Pass
54dd10b3bd Font family needed for textarea 2014-09-18 09:15:46 +01:00
Matt Pass
cc62871815 Add section for pulls, display message re v4.3 2014-09-18 09:01:11 +01:00
Matt Pass
72da926a4d Display ICEcoder at a 1.0 scale
Displays without scaling on tablets and phones then. Not that it's
tablet friendly, but maybe one day.
2014-09-17 15:03:25 +01:00
Matt Pass
d2f34c50df Merge pull request #455 from xoofoo-project/master
Update french language
2014-09-17 14:58:57 +01:00
Matt Pass
8454d918e8 Warn if using over non https connection 2014-09-17 14:18:28 +01:00
Matt Pass
048577270b die() so we go no further
Clients can ignore this and continue. All headers should be followed up
by a die().
2014-09-17 13:38:00 +01:00
Matt Pass
113e045f26 realpath file, result in error if !exist / !docroot 2014-09-17 13:35:00 +01:00
Matt Pass
9c35206e3b realpath the file and die if !exist or !$docRoot 2014-09-17 12:54:24 +01:00
Matt Pass
a807e598fe realpath $fileName, die if !exist or !$docRoot 2014-09-17 12:46:33 +01:00
Matt Pass
fbfd58b788 Update to match main JS file 2014-09-17 12:11:39 +01:00
Matt Pass
4314ca2917 Path fixes for add and delete actions
When adding files, location should be a slash if not set
Remove any initial double slashes
When removing files, location should be blank if not set. Then replace
iceRoot with a slash, before reducing double slashes at start, slashes
for pipes and tack together with file to make the targetElem, which is
what we end up looking for
2014-09-17 12:10:18 +01:00
Matt Pass
f3b89056ac Load screen, path removal, tweaks & error handling
Show loading screen on clicking Commit button
Committed filepaths need to have pipes replaced with slashes
Splice from diffPaths or deletedPaths array so we remove committed files
Hide Loading mask if we don't have more to commit
Only display alert message and toggle GitHub diff mode if we have no
diff or deleted paths left to deal with
Error message is an object, so inform user that we'll console.log that.
2014-09-17 12:06:56 +01:00
Matt Pass
d887eca03c Chaneg path scope & check excludedArray first
treePaths, diffPaths and deletedPaths now all namespaced to top level so
we can access from elsewhere
Check we have excludedArray first before looking at it's index. This is
to avoid issues when switching in and out of GitHub Diff mode.
2014-09-17 12:02:13 +01:00
Matt Pass
9ba08fbf48 Stop if running old version
Shouldn't do this and could be a security vuln.
2014-09-17 08:54:27 +01:00
Matt Pass
15fe43098f Cover local and remote files, but avoid LFI 2014-09-16 18:30:34 +01:00
Matt Pass
05de070294 Die if we have a realpath file vs doc root mismatch
Stops LFI attacks such as:

lib/file-control.php?action=load&file=/..././/..././/..././/..././/..././/..././etc|passwd&csrf=4c43835566ee4e2x4a455df75a66c47f
2014-09-16 18:12:06 +01:00
kris
024e943d9f Merge pull request #7 from mattpass/master
update 06-09-2014
2014-09-06 02:43:26 +02:00
Matt Pass
f82914207d $t needed in function to display text 2014-09-05 22:36:01 +01:00
Matt Pass
941801078c Updated to match main JS file 2014-09-05 22:22:28 +01:00
Matt Pass
296eeff33d Translations added for find/replace area in English 2014-09-05 22:21:31 +01:00
Matt Pass
0715782e3a For now stop using translations on find/replace
Using non English test for now is breaking functionality
To be looked into and fixed, then these translations can be re-enabled
2014-09-05 22:17:40 +01:00
Matt Pass
44aca5ad1b Need to use array_replace_recursive()
This is the function needed to overwrite $text array ontop of
$englishText, including nested arrays
2014-09-05 22:07:26 +01:00
Matt Pass
d24a2745ce Case change on function namee 2014-09-03 06:14:50 +01:00
Matt Pass
8da637c650 Remove new line at EOF 2014-09-03 06:12:38 +01:00
Matt Pass
b9be8cb70d Remove new line at EOF 2014-09-03 06:11:54 +01:00
Matt Pass
99a9c7ef80 Case change only on function name 2014-09-03 05:34:20 +01:00
Matt Pass
744cfbad16 Fix to language ref array item 2014-08-31 07:01:23 +01:00
kris
2db030c772 update french language 2014-08-30 12:44:46 +02:00
kris
a7e4c28b2f Merge pull request #6 from mattpass/master
update 29-08-2014
2014-08-30 11:12:02 +02:00
Matt Pass
7115b9e22c Updated to match main JS file 2014-08-29 19:31:49 +01:00
Matt Pass
4cb2ac98d3 Deleted files show up now
Excluded array paths have slashes not pipes
Don't add deleted files to diffPaths array also, keep them seperate
Can't use a for loop to add deleted files, only adds last reference as
happens before a tickover
Instead use a setInterval as a loop, with k as the counter instead of j
to avoid confusion
Check if it's not excluded dir/file as an outer if statement, with path
fix for root
3 cases set up for adding deleted dirs/files in a sub-dir, plus folder
or file in the root
Clear the interval when finished looping
2014-08-29 19:28:42 +01:00
Matt Pass
28881db771 Path reference fixes
Replace iceRoot with nothing on location
If we have no location, it should be a nothing to start with, not a
slash
Use this.childNodes[1].id instead of made up hardcoded ref
onClick event added also, wasn't there previously?!
2014-08-29 19:22:39 +01:00
Matt Pass
7791fe21f0 Merge pull request #454 from koseelg/master
Update norwegian.php
2014-08-29 15:45:45 +01:00
Matt Pass
73148eabed Removed unneeded setting of thatNode 2014-08-29 07:23:21 +01:00
Matt Pass
5f0d7a5a19 xssClean needs HTML context 2014-08-28 21:28:51 +01:00
Matt Pass
86b62d52a0 Remove extra closing bold tag 2014-08-28 20:50:52 +01:00
kris
6c656f3b8f French translation in progress 2014-08-27 19:43:03 +02:00
kris
eaf466c2ce Merge pull request #5 from mattpass/master
update 27-08-2014
2014-08-27 19:19:48 +02:00
Matt Pass
4efb9732a5 Updated to include new translations 2014-08-27 17:35:37 +01:00
koseelg
f80eacbd32 Update norwegian.php
Done cosmetic changes .....
2014-08-27 14:15:27 +02:00
Matt Pass
7cb52f4fc4 Persian language update 2014-08-27 09:39:20 +01:00
Matt Pass
06fba7c7cb Merge pull request #450 from koseelg/master
Create norwegian.php
2014-08-27 09:36:15 +01:00
Matt Pass
9499e98066 Adjusted size of commit screen shown 2014-08-27 09:20:26 +01:00
Matt Pass
c2ec4b0ae3 Commit action added
xssClean call needs "html" context
Commit action added, displays screen to allow user to input the commit
title and message
Gets content of files ready and puts into textareas with IDs to be
picked up after cleaning up filenames
Start a github object with JS and push to GitHub, running through files
until it's done them all, and displaying error message if there's a
problem. If all is OK though, it simulates a CTRL-click to deselect file
and remove from file manager list.
When done, it will state it is switching back and switch back
2014-08-27 09:20:24 +01:00
Matt Pass
ac3f3c4328 CSS file started for github.php
This file now has display also (for commit actions)
2014-08-27 09:20:22 +01:00
Matt Pass
6857dadec5 ctrlSim added, GitHub nav and actions
ctrlSim param available to simiulate a CTRL key
In githubDiff mode, show the number of selected files and update button
and text colours
gitHubAction function added to call the github.php file with that action
in the URL in the centre of screen
Function also added to show/hide GitHub nav
Removed old alert message as we're much closer to being finished now
2014-08-27 09:20:18 +01:00
Matt Pass
9619dce24f Classes added for GitHub nav 2014-08-27 09:20:16 +01:00
Matt Pass
f10909160a On load, hide or show the GitHub nav
Dependant on top.ICEcoder.githubDiff being true/false
2014-08-27 09:20:13 +01:00
Matt Pass
693b871456 Set auth token in session, add GitHub nav
If we have set an auth token in the settings, need to set the session
var
Add the extra nav for GitHub
2014-08-27 09:20:11 +01:00
Matt Pass
4612e5036d Exclude .git dir 2014-08-27 09:20:10 +01:00
kris
abbc92d319 Merge pull request #4 from mattpass/master
update 26-08-2014
2014-08-27 01:00:41 +02:00
koseelg
dec62a3380 Create norwegian.php 2014-08-26 09:31:28 +02:00
Matt Pass
80216b434d Merge pull request #447 from lzh370/master
Updated Chinese translation
2014-08-22 10:45:16 +01:00
lzh
95b5126227 An error search drop-down box
If these two values ​​are translated into Chinese, will lead to a
drop-down box to select the Replace option, it canceled the translation.
2014-08-22 16:57:22 +08:00
lzh
34b34bcc88 Updated Chinese translation 2014-08-22 15:42:28 +08:00
Matt Pass
e41cb4dc09 Comma missing after array 2014-08-22 08:07:37 +01:00
Matt Pass
a6b45171ab Merge pull request #445 from Olliiee/master
Created germna.php file
2014-08-22 07:57:53 +01:00
Oliver
32e05ea8ac Missed the header 2014-08-21 21:53:16 +02:00
Oliver
0bbc9347aa Added new messages
added new messages
fixed some typos
2014-08-21 21:52:27 +02:00
Matt Pass
f4894fa838 LI shortcut added
CTRL+Alt+8 shortcut for <li>
Remove old, unused h4-h6 shortcuts from array
Help screen is a little higher to allow for the new shortcut
Minified JS file brought up to date
2014-08-21 15:31:33 +01:00
Matt Pass
34074e5e64 Dutch language initial commit 2014-08-21 14:44:30 +01:00
Matt Pass
d5bca0c38a Merge pull request #443 from lzh370/master
Supplementary Chinese translation
2014-08-21 14:37:07 +01:00
Matt Pass
f96651b9e8 Load English first, then merge lang ontop
It's English ontop of English for now, but 2nd include can be changed in
the code here and soon to be set via the UI.
2014-08-21 14:30:43 +01:00
Matt Pass
0d4ca6a483 Final language replacement placeholders 2014-08-21 14:29:11 +01:00
Matt Pass
195ba788bb JS lang items used and print pre wrap fix 2014-08-21 14:25:57 +01:00
Matt Pass
f5d19d99d4 Get the ice-coder lang array into a JS array
So the /lib/ice-coder.js file can make use of it
2014-08-21 14:24:30 +01:00
Matt Pass
115169b16b alert & console.log the action and $file
Commented out, but useful for people to uncomment to see what's
happening if path issues etc
2014-08-21 14:22:44 +01:00
Matt Pass
90a58f0300 Final English text items 2014-08-21 14:21:05 +01:00
Oliver
4e3d73e8b9 Create germna.php file
Added german language file.
2014-08-21 14:38:10 +02:00
lzh
cdd38a88d2 Supplementary Traditional Chinese translation
Improved Simplified Chinese translation of individual errors.
2014-08-19 12:52:52 +08:00
lzh
bc9639dac2 Supplementary Chinese translation 2014-08-19 11:55:01 +08:00
Matt Pass
38b7de4b5c Merge pull request #440 from xoofoo-project/master
Update french language
2014-08-16 21:11:52 +01:00
kris
1ee215516b Update french language
Even more definitions translated in french
2014-08-11 01:32:06 +02:00
kris
92c4ec0223 Merge pull request #3 from mattpass/master
update 10-08-2014
2014-08-11 00:25:27 +02:00
Matt Pass
aab3c5a433 Merge pull request #439 from xoofoo-project/master
Update french language
2014-08-10 21:11:05 +01:00
Matt Pass
ee9e053bb9 Even more definitions added
About 70% done now
2014-08-10 21:08:00 +01:00
Matt Pass
21ab41e677 Placeholder vars added for more lang pieces 2014-08-10 21:07:42 +01:00
kris
2d76f1f7f3 Update french language
More definitions translated
2014-08-10 02:23:30 +02:00
kris
9cd6f8ee8a Merge pull request #2 from mattpass/master
update 09-08-2014
2014-08-10 01:36:10 +02:00
Matt Pass
b8f02708e0 Chinese (traditional) and Italian added 2014-08-08 09:37:23 +01:00
Matt Pass
d201e85d86 Placeholder vars added for lang pieces 2014-08-08 09:30:56 +01:00
Matt Pass
ec05132fa8 Make array available in session
Used by files that don't load settings.php
2014-08-08 09:29:19 +01:00
Matt Pass
664d8058b5 More definitions added
For bug-files-check and file-control files in /lib dir
2014-08-08 09:26:38 +01:00
Matt Pass
87450c0f78 Renamed to '-simplified' 2014-08-08 09:25:50 +01:00
Matt Pass
84d1402eef Initial translations 2014-08-07 06:38:42 +01:00
kris
6746e0bc52 Merge pull request #1 from mattpass/master
first update 06-08-2014
2014-08-06 14:12:14 +02:00
Matt Pass
a0bc6e8c31 Undo 2 changes that shouldn't be committed 2014-08-06 09:30:13 +01:00
Matt Pass
5de4cd657e Language system setup and English translations
Covering top level and login so far only
2014-08-06 09:26:50 +01:00
Matt Pass
230e8a0983 Break in echo needs a ; and continue with echo 2014-07-31 16:28:04 +01:00
Matt Pass
3d66db04ae Working with GitHub diff mode
Now an HTML type file, had no doctype, header etc previously. Now does
and also loads in 2 x JS files for GitHub API control
Gets full list of files, considers .gitignore files and gets an excluded
list
Always has a GET location now, so no need to consider
If in GitHub diff mode, for each file in our list get file contents and
put the name, SHA and type into 3 arrays
Work out GitHub repo path and set up JS arrays the same as PHP arrays
Then start a github object and begin examining tree for differences
recursively, adding to arrays and removing DOM elems from branch DIV as
needed
With that done, we need to cover the dirs not yet opened and if they
contain no changes, remove them
Finally, remove .gitignore excluded filrs
showFile function set up mostly as per previous code, but now also adds
files that are deleted (ie, to make them show up in the tree)
Error catching and helpful messages and redirections added such as when
you have no diffs or used up your GitHub API rate limit
2014-07-28 07:00:56 +01:00
Matt Pass
6a81152b05 GH token set flag, new functions and tweaks
githubAuthTokenSet flag added, false to begin with
Refreshing file manager now just reloads, not loads hardcoded URL
New function added to ask for GitHub auth token
If set, it auth's with that token and also passes through the place to
go next. Clears token value too for security.
On attempting to show the GitHub manager pane, if we have a token set,
great, show it, if not ask for the token
On toggling the GitHub diff mode, if we don't have the token set, ask
for it
githubAuthTokenSet param passed in to update flasg
2014-07-27 12:54:04 +01:00
Matt Pass
c988f76612 auth action added
We can now call an auth action along with the token and it will set our
flag
As a follow up, it continues what we were previously doing - showing
manager pane or toggling file display
Note: 2 x JS files can probably be removed for now. Was going to look
into auth token validation here, but until I do, they're not needed.
2014-07-27 12:49:39 +01:00
Matt Pass
cc152db8ba Semicolon moved, githubAuthTokenSet if value set
CSRF value ends with a ; as per all other settings (moved from other
line)
If we have a githubAuthToken value (ie, set in our config settings
file), update top.ICEcoder.githubAuthTokenSet to true so we don't ask
user for it to be set in our session
2014-07-27 12:46:47 +01:00
Matt Pass
6fedd41ced githubDiff mode flag and root loaded by get-branch
Session var used as flag to indicate github diff mode
Instead of now including get-branch.php after setting the | root
location, we now set the src on the fileControl iframe, which does the
loading of the branch as with all other subsequent branches loaded
2014-07-27 12:42:12 +01:00
Matt Pass
64c2cfa06f Viewport set for mobile devices
Means at least the login screen is mobile friendly, just the rest of
ICEcoder to do now! :)
2014-07-27 12:39:00 +01:00
Matt Pass
82c80a24b2 Tooltips now blue to stand out more
Were going a little unnoticed by users previously
2014-07-27 12:38:20 +01:00
Matt Pass
504e2e20fe githubAuthToken setting added
githubAuthToken added as new setting
passed into useNewSettings function to update githubAuthTokenSet flag to
true
2014-07-27 12:37:36 +01:00
Matt Pass
21b4c8bc12 Github auth token setting added
Editor preview not as high and other options shifted up
Github Auth Token setting added with notes on usage
2014-07-27 12:31:12 +01:00
Matt Pass
f6aff03fb9 Setting moved and githubAuthToken added
pluginPanelAligned setting moved to position where it is in rest of
ICEcoder
githubAuthToken setting added
2014-07-27 12:29:58 +01:00
Matt Pass
30561cc2ae github.js, base64.js and underscore.min.js added 2014-07-27 12:27:19 +01:00
Matt Pass
e8035c122c Old settings that aren't last line end with comma 2014-07-01 14:17:24 +01:00
Matt Pass
69aec81200 indicateChanges() on 4ms delay after a save
To update the character in the browser tab
2014-07-01 12:56:57 +01:00
Matt Pass
9b55729c91 Session ID added to output 2014-06-30 08:01:08 +01:00
Matt Pass
d4131f3238 Tested die() again and works now
Removes the Linux Dash plugin just fine now, so reincluding this code.
2014-06-27 13:39:42 +01:00
Matt Pass
dbffc2925c Version 4.1 2014-06-27 11:22:47 +01:00
Matt Pass
8ec0d518ad Largely adjusted XSS protection
Adjusted to match that implemented by Ashar Javed
(https://twitter.com/soaj1664ashar, demo:
http://xssplaygroundforfunandlearn.netai.net/final.html). Was
unbreakable against 78k XSS attempts, so seems very solid
2014-06-27 11:22:32 +01:00
Matt Pass
3bf0e2e4db Return false after function 2014-06-27 09:54:39 +01:00
Matt Pass
4803eb2bac xssClean $_POST vars 2014-06-27 08:52:26 +01:00
Matt Pass
8509a62f06 Test $_GET['string'] before setting
Minor text adjustments
Only set the session var if we have no QS param
Fix str_replace on > char's
Delete unnecessary $configUsersTemplate line
2014-06-27 08:38:35 +01:00
Matt Pass
bc8d715a56 Test script added
Tests PHP version, session maintenance and include file inclusion.
Should help users who have occasional issues to pinpoint problems.
2014-06-25 16:03:18 +01:00
Matt Pass
b0fd03f571 Don't die if dir isn't deleted
If we fail to rmdir (perhaps a permission problem), don't die. This
silently continues and does leave empty folders behind, but stops things
from breaking until the solution is really found.
2014-06-25 12:49:29 +01:00
Matt Pass
a55102106e Need double quotes for die message 2014-06-25 11:43:50 +01:00
Matt Pass
78c3308686 Also white text on other die message 2014-06-25 11:38:55 +01:00
Matt Pass
fe6424a02b Show text in white, so shows on dark BG 2014-06-25 11:37:47 +01:00
Matt Pass
047a33a604 Snowflake char for unsaved state, not asterisk 2014-06-25 11:35:26 +01:00
Matt Pass
85e8d93190 GitHub diff toggle var & function added 2014-06-23 08:48:25 +01:00
Matt Pass
5c2e7c0adf GitHub icon shows if needed as toggle button 2014-06-23 08:45:05 +01:00
Matt Pass
d63c1bf2ca githubOn/Off classes added for icons 2014-06-23 08:42:49 +01:00
Matt Pass
36b03e840d GitHub icons added for on/off toggle states 2014-06-23 08:41:46 +01:00
Matt Pass
b7731e03ff Removed alert message, moved to JS function 2014-06-23 08:41:27 +01:00
Matt Pass
5c29bb106a Update JS iceRoot var after settings update 2014-06-19 08:59:56 +01:00
Matt Pass
52b29423d0 Shortcuts for insert line before/after added
Taller help screen needed as a result
2014-06-19 08:46:31 +01:00
Matt Pass
4707e15c12 Insert line before and after functions added
Triggered with shortcut keys (Shift+Enter) and (Alt+Enter) respectively
2014-06-19 08:41:06 +01:00
Matt Pass
484911c103 Multiple select shortcut info added 2014-06-18 16:52:36 +01:00
Matt Pass
5aa5dc82bb className gone, need to use type
className dropped by CodeMirror, need to pick up "error" from type
As it may not be there, we need to test for its existence and it's also
be part of a string eg "tag brackets error", so indexOf is needed
2014-06-18 16:52:01 +01:00
Matt Pass
5d4e22d363 Cursor set to end on replaceSelection calls
It's the default, but good to be specific
2014-06-18 16:50:03 +01:00
Matt Pass
d5b6355261 Closebrackets addon included
Auto adds closing brackets etc for pairs - ()[]{}''""
2014-06-18 16:49:02 +01:00
Matt Pass
f71a16552e Display sub-dir & file counts for dirs 2014-06-18 08:05:51 +01:00
Matt Pass
f2d06a1a2c Function moved to ICEcoder.indicateChanges() 2014-06-18 07:37:08 +01:00
Matt Pass
ed5f2259c3 Should be just the tab number passed in 2014-06-18 07:36:42 +01:00
Matt Pass
b344d1e91e indicateChanges function addded
Shows a * at the end of the title to indicate changes
Called on closing tabs and closing all tabs
2014-06-18 07:36:11 +01:00
Matt Pass
5f051baeca Process file added to be run on file save 2014-06-18 07:06:34 +01:00
Matt Pass
4122a90175 Indicate changes in title tag via * flag 2014-06-17 10:11:10 +01:00
Matt Pass
823c2c1b5f Make versionNo available in JS object 2014-06-17 10:10:51 +01:00
Matt Pass
5f778043e4 Now handles reloads on demand
If we're installing and the plugin needs a reload, confirm that with the
user and reload on OK, else reload iFrame only
If a plugin needs a reload, display that text below the plugin name, so
user is aware before installing
A little more padding on the td that contains the name to look a little
nicer and accomodate the possible extra line
2014-06-17 09:21:29 +01:00
Matt Pass
38c7885718 Do pesticide plugin on preview window open 2014-06-12 16:57:17 +01:00
Matt Pass
bada48ae76 Do pesticide plugin on save if not MD 2014-06-12 16:55:29 +01:00
Matt Pass
2624469d61 Include pesticide.js if exists, doPesticide on key 2014-06-12 16:54:09 +01:00
Matt Pass
40fbc83547 Merge pull request #404 from alelondon/patch-1
Update README.md
2014-06-07 14:33:46 +01:00
Ale London
284f5acfb7 Update README.md 2014-06-06 22:59:49 +01:00
Matt Pass
227e3cbb94 $tgtName var for path ref
$name is being used to stream data from zip's $data also, so was messing
with it's reference
Needed seperation of vars for different purposes
2014-06-04 08:08:08 +01:00
Matt Pass
362c9935bf Merge pull request #403 from RelaxedArcher/master
Added settings menu for multi-user and registration control
2014-06-04 07:47:09 +01:00
RelaxedArcher
58eebb15fb Added settings menu for multi-user and registration control 2014-06-04 03:01:48 +03:00
RelaxedArcher
10b6a3556f Added settings menu for multi-user and registration control 2014-06-04 02:46:03 +03:00
Matt Pass
77559afe60 GitHub processing script setup, clone added
Detect if SSL capabilities are available and if not, inform user what
they need to do.
On cloning, establish local and remote paths and if our root is in the
local list, establish the target, zipURL and zipFile path & name
Get the zip file over file_get_contents if possible, otherwise cURL.
Then unpack the zip into our local folder. The first entry will be the
folder inside of the zip, so we get the $dirName of that only to use,
this is removed from subsequent file paths
When done, remove the zip file and refresh the file manager to show the
files
2014-06-03 09:30:55 +01:00
Matt Pass
20f6e838ba Setup stylings for GitHub manager 2014-06-03 09:12:20 +01:00
Matt Pass
ffef82fe76 GitHub manager to add, edit/remove and choose
Establish local and remote paths plus get settings file contents
If we're choosing a path pair, get the number and the 2 chosen paths
(local and remote). Paths are not valid until checked if exist. Prior to
that, a mkdir is attempted if it doesn't with error reporting if that
doesn't happen.
If valid, set the new root path and reload the file manager
Adding and editing of local and remote array paths on postback also
handled
Page displays form & table so you can manage repo pairs along with
providing usage info
2014-06-03 09:10:55 +01:00
Matt Pass
3a98c3a457 Couple of code tweaks and new repPosEnd
Need to rtrim off the last comma and forgot to add table row start & end
tags
The end cut point is now githubLocalPaths, not previousFiles
2014-06-03 08:45:24 +01:00
Matt Pass
dabb9ba79c githubManager added
Now accessable from the file manager menu option
Clicking this sets the content of the mediaContainer popup display to be
an iFrame loading the GitHub manager and shows the blackMask
2014-06-03 08:43:48 +01:00
Matt Pass
f5cd2b46b9 Else & if conds added to get GitHub repo
Added an else condition to work with empty folders, establishes local
and remote paths and works out of the $iceRoot is one of our local paths
If so, inform the user their folder is empty and ask the user if they'd
like to clone the repo
If so, show the loading mask and call our GitHub script to begin the
process
2014-06-03 08:40:48 +01:00
Matt Pass
5e792b80a9 New arrays for GitHub paths 2014-06-03 08:20:15 +01:00
Matt Pass
020a95bd80 Slightly smaller logo 2014-06-03 08:19:19 +01:00
Matt Pass
13d63575f6 New logo added 2014-05-22 07:52:48 +01:00
Matt Pass
4870fe9560 Changes to fit in with CodeMirror 4.2
setLine is now replaceRange
New namespacing on folding
replaceSelection needs "around" param
removeLine deprecated, using execCommand('deleteLine') now
cursor.end set to 1000000 for consistency
2014-05-22 07:32:36 +01:00
Matt Pass
882e026f76 onkeyup own event now and fold changes
onKeyEvent is no longer a param function, now something set in an 'on'
event function
setLine now replaceRange
doFold is the new fold function, "brace" or "xml" string passed to it,
not an object now
codeFoldTag and codeFoldBrace vars no longer needed now
2014-05-22 07:26:00 +01:00
Matt Pass
2136ad1955 setLine now replaceRange, around on getSelection
setLine deprecated, now need to use replaceRange and pass 2 objects for
start & end (line & ch)
getSelection needs "around" param as default is now "end"
2014-05-22 07:13:30 +01:00
Matt Pass
fa97918684 Use doFold now, pass string instead of object 2014-05-22 07:07:39 +01:00
Matt Pass
05daab79c1 Rename function doFold and new namespace
doFold seems a better name, so renamed and rangeFinder var now foldType
New namespace convention on folding, also specifying type by foldType
2014-05-22 07:05:44 +01:00
Matt Pass
57a789f046 Use CodeMirror 4.2 dir 2014-05-22 07:00:18 +01:00
Matt Pass
61cc4b82f0 Update to CodeMirror 4.2 2014-05-22 06:56:32 +01:00
Matt Pass
a8168fed86 Include this lib file only once
Is called from headers.php also now, so don't want to error by calling
again (clashing function names etc)
2014-05-20 07:26:05 +01:00
Matt Pass
47af30e0b6 Include common settings and xssClean output
inlcude_once the settings-common.php file so we have the xssClean
function
Set $req to the xssClean'd value or blank
Also xssClean other strings that are output
2014-05-20 07:25:15 +01:00
Matt Pass
277dc67243 printCode function added
Prints current tab, though code flows off the page horizontally, needs
tweak to something.
2014-05-16 09:18:14 +01:00
Matt Pass
0e48b8d5a3 Only show this button text if enabled reg 2014-05-16 08:21:06 +01:00
Matt Pass
3bc4deac68 Merge pull request #397 from RelaxedArcher/master
Fixed an issue affecting registration in multi-user mode
2014-05-16 07:49:44 +01:00
RelaxedArcher
6a50c1ce2b Fixed an issue that caused registration to be always available while in multi-user mode 2014-05-10 02:30:22 +03:00
Matt Pass
55def4402a Version 4.0 2014-05-03 15:01:19 +01:00
Matt Pass
b23e2fe40b onClick show menu can begin 2014-05-03 14:36:20 +01:00
Matt Pass
8133adeab8 !isset($_REQUEST["csrf"]) is extra fail cond 2014-05-03 14:19:24 +01:00
Matt Pass
a470daf9f5 No need for other chars to be replaced
Impossible to output an XSS without < or > alone
2014-05-03 14:13:48 +01:00
Matt Pass
1a85a1ddc3 Display a more helpful & useful error message 2014-05-03 14:09:09 +01:00
Matt Pass
ab8ad37467 strClean $_GET value first 2014-05-03 12:08:30 +01:00
Matt Pass
b811cfe92f strClean $_GET['plugin'] and use that 2014-04-28 08:00:22 +01:00
Matt Pass
fa40d9dad7 Also attempt to get over https, then http
Supresses warnings on https attempt with @
2014-04-26 16:55:55 +01:00
Matt Pass
16c7e5d010 Attempt to get over https, then http
Supress warnings with @ on https attempt
Explode what we have afterwards
2014-04-26 16:54:11 +01:00
Matt Pass
d5e6fb041f Reverting to use http: instead of https: for now
file_get_contents won't get https: data for now
Need to look at resolving this
2014-04-26 16:14:27 +01:00
Matt Pass
f00686c679 If we have GET QS params, add &crsf=xyz to end 2014-04-26 16:12:55 +01:00
Matt Pass
45fef223ce Removed list of people, now on website 2014-04-26 14:59:53 +01:00
Matt Pass
89c811d140 Darker side text, blue links 2014-04-26 14:59:18 +01:00
Matt Pass
17ec5f517c Turn SSL verify peer off
https over CURL Won't work locally otherwise
2014-04-26 13:19:33 +01:00
Matt Pass
56511b66bb fileNavH not as tall anymore 2014-04-26 12:40:11 +01:00
Matt Pass
4f5ed727f0 https used and drop IGG crowdfund link 2014-04-26 12:25:32 +01:00
Matt Pass
75885aecf5 strClean now replaces javascript:
htmlentities doesn't cover : and str_replace on : is too vague
regex is case insensitive
2014-04-26 12:25:12 +01:00
Matt Pass
fa48d0d2f0 Strip ../ so we don't have dir traversal vuln 2014-04-26 12:24:01 +01:00
Matt Pass
ec44407e25 xssClean the displayed file/folder name
Using html filter
2014-04-26 12:23:29 +01:00
Matt Pass
394067ff07 Need <b> and <br> after cleaning and https used 2014-04-26 12:23:04 +01:00
Matt Pass
ed800a01ce https: used 2014-04-26 12:22:31 +01:00
Matt Pass
599af8d96b https: used and revised git command 2014-04-26 12:21:06 +01:00
Matt Pass
9a2881cd7b Remove comma 2014-04-24 12:10:17 +01:00
Matt Pass
6e7612d3ec Inform user they can't delete the root
Stops the root accidentally being deleted
2014-04-23 08:22:44 +01:00
Matt Pass
0413ec4414 xssClean using 'html' filter 2014-04-23 07:43:17 +01:00
Matt Pass
c88d4f46e3 Rewrite of xssClean function to be neater 2014-04-23 07:41:30 +01:00
Matt Pass
1306853e1e Cannot use $_REQUEST, should be $_GET || $_POST
$_REQUEST appears to contain other system info, need to check on the
existence of $_GET or $_POST data
2014-04-23 07:23:02 +01:00
Matt Pass
078068e252 Don't allow directory traversal 2014-04-23 07:12:13 +01:00
Matt Pass
69d8ddce77 Need to target on top.ICEcoder.xssClean 2014-04-22 09:25:18 +01:00
Matt Pass
3926d4468c xssClean function added & used by serverMessage
Replaces 5 x based HTML chars
2014-04-22 08:55:09 +01:00
Matt Pass
493950667b Clean tags from HTTP UA
Users can alter this, causing an XSS
2014-04-22 08:06:17 +01:00
Matt Pass
d6a7db8f3e xssClean function added
Had 4 different contexts, the first 2 alter parts of strings, the last 2
remove those parts
2014-04-22 08:05:40 +01:00
Matt Pass
d6fcf5a121 Need CSRF on URL called on logout 2014-04-21 08:32:22 +01:00
Matt Pass
328a8a9808 Adjustment to value, should just be nosniff 2014-04-21 08:15:34 +01:00
Matt Pass
0daf6c3081 Redo security headers 2014-04-21 07:57:41 +01:00
Matt Pass
1d5c74e424 Add CSRF and clickjacking protection
This header file included in all PHP files as first item.
CSRF checks happen on GET or POST instances
Security related headers also added to prevent clickjacking
2014-04-18 18:21:17 +01:00
Matt Pass
c6bb782118 Add csrf to end of all querystrings 2014-04-18 18:19:58 +01:00
Matt Pass
b45817ec65 headers.php included and csrf POST added 2014-04-18 18:10:50 +01:00
Matt Pass
a15dfda92c headers.php included and csrf POST and GET added 2014-04-18 18:07:49 +01:00
Matt Pass
6030e9a4ca This is now set, in headers.php 2014-04-18 17:59:27 +01:00
Matt Pass
a3c0243772 Include headers lib & csrf hidden form field
To help protect against CSRF and clickjacking
Also include hidden form field containing this for postback
top.ICEcoder.csrf also set
2014-04-18 17:57:54 +01:00
Matt Pass
3d89af7e17 Add trailing slash to path
Otherwise, will ignore files such as lib/plugins-display.php etc
2014-04-18 12:44:36 +01:00
Matt Pass
03655c4c4b Find config- files and update those
No longer using 3 hardcoded examples in array, but scanning the old dir
and updating files beginning 'config-'. That covers the .php and old
files also.
2014-04-18 12:21:49 +01:00
Matt Pass
acfcb6bf9d $context added & sub function to transpose
$context added as global so we don't get undefined
transposeSettings function added as sub function we can all with params
copyOverSettings is now a function which calls that sub function 3
times.
2014-04-18 11:39:14 +01:00
Matt Pass
57593d730f Now copying over users template & settings
Coping over system settings now won't set line if $thisKey is blank
2 more functions added to copy over users template and users settings
files. These are largely the same as copying over settings, so will make
a sub function and call will params as a next step.
2014-04-18 10:17:48 +01:00
Matt Pass
a141a4bdf5 Remove line breaks and extra tabs
Makes it easier to update in the updater process
2014-04-18 10:11:10 +01:00
Matt Pass
33e751027d Get rid of line breaks, puts settings onto 1 line
Makes it easier to update in the updater process
2014-04-18 10:10:05 +01:00
Matt Pass
e65d2b0805 Copying over settings now completed
Gets old and new settings info, counts through each line of new settings
and if we have a match on the old settings, copy that over if it's not
versionNo or codeMirrorDir.
Saves settings once the $content is established
2014-04-18 08:35:21 +01:00
Matt Pass
9d7f7f8e93 Start copying settings over
$updateDone = true moved to end of new function, copyOverSettings
Extra echo line in openNewZip and then calls this function
Get settings from old config___settings.php file
For now, for each one, get $key and $value
Need to save these info new config___settings.php file
2014-04-16 08:48:24 +01:00
Matt Pass
91f14785b7 Don't move plugins dir 2014-04-16 08:10:45 +01:00
Matt Pass
1267a3c895 String replace on beta in filename and fopen alt
Establish $remoteFile which replaces ' beta' with '-beta'
Add fopen method also as not everyone has cURL
Display die message if both of those fail
2014-04-16 07:44:29 +01:00
Matt Pass
0748f495df On moving files pass fileOrFolder with add action 2014-04-15 08:40:37 +01:00
Matt Pass
83f6c5cf53 Only move to different folder and 3 x bug fixes
Global iceRoot so it can be used
Escape apostrophe's in $fileName on upload
Establish $srcDir and $tgtDir and only consider moving if $srcDir !=
$tgtDir and $fileLoc != ""
$fileOrFolder now established on moving and passed as param to
updateFileManagerList
2014-04-15 08:39:46 +01:00
Matt Pass
1385d65a2b Use new fileOrFolder param to determin type
Rather than rely on a . in the name
2014-04-14 08:36:23 +01:00
Matt Pass
68e5e0b5a5 Specify if it's a file or folder on updating FM
folder on new folder
set $fileOrFolder on pasting, that is used then on updating
file on uploading
file on saving
2014-04-14 08:35:26 +01:00
Matt Pass
72e98816f0 Need to check dir exists before removing
Subdirs could end up being removed in a race condition via rmdir at end
of deletePlugin function
Tweak die error messages to indicate dir or file
2014-04-14 07:35:44 +01:00
Matt Pass
641ff79493 Only use location if iceRoot is blank
Because setting an root path has its own relative file path
2014-04-11 08:50:23 +01:00
Matt Pass
dff16e9b3f 8 new languages added
C, C++, C#, Go, Lua, Perl, Rust and Sass added
Perl has # comments (single & block)
Lua has --[[xyz]] for block, and -- for single lines
2014-04-10 10:04:29 +01:00
Matt Pass
7264deee67 8 new languages added
C, C++, C#, Go, Lua, Perl, Rust and Sass added
2014-04-10 10:04:28 +01:00
Matt Pass
f08552c5e3 Upgrade to CodeMirror 3.23 2014-04-10 10:04:26 +01:00
Matt Pass
b131ef1524 8 new languages added
C, C++, C#, Go, Lua, Perl, Rust, Sass icons added
2014-04-10 10:04:24 +01:00
Matt Pass
b6c16d938d Languages added, merged & removed
Go, Lua, Perl, Rust and Sass added
Less removed, part of CSS now
Julia no longer loaded as seperate lang file
2014-04-10 10:04:22 +01:00
Matt Pass
842d7e5b37 Julia lib removed, in main codemirror JS lib now 2014-04-10 10:04:21 +01:00
Matt Pass
91a28990e0 Upgrade to v3.23 & new langs
Go, Lua, Perl, Rust and Sass added
2014-04-10 10:04:19 +01:00
mattpass
7843b5fac6 Merge pull request #381 from darkgrin/server_addr_err
Fix error "Undefined index: SERVER_ADDR".
2014-03-31 18:15:51 +01:00
darkgrin
bdf3d6615e Fix error "Undefined index: SERVER_ADDR".
This is reproducible when we use php's built in server via 'php -S ...'.
2014-04-01 00:38:33 +08:00
Matt Pass
1c81713063 Break down into var and then array usage
Won't work this way on old versions of PHP
2014-03-24 07:32:23 +00:00
Matt Pass
12ced2c7fc Commenting on Erlang, Julia, Java and YAML
Using commentChar now to handle char used on commenting (# or % for
Erlang)
Erlang, Julia, Java and YAML commenting covered
Include Python also as forgotten
adjustCursor to be set to 1 on single chars, overriding 2
Cursor adjusting done here now, not in parent function anymore as
adjustCursor value not available from that scope
2014-03-20 14:36:39 +00:00
Matt Pass
43ddc3d78f Moved into sub function
adjustCursor not available from child scope
2014-03-20 14:33:08 +00:00
Matt Pass
400524169e Better Julia and YAML logos (switched with zip!) 2014-03-20 14:31:39 +00:00
Matt Pass
6b35c5dd2c Update to match main JS 2014-03-20 07:18:55 +00:00
Matt Pass
33b2c7a06c Should be an array, not a string 2014-03-19 19:05:07 +00:00
Matt Pass
04a11bdc4a Using CodeMirror 3.22 now 2014-03-19 18:48:16 +00:00
Matt Pass
9ee6a80209 Julia added as a seperate file as a temp measure
Not available in CodeMirror minification helper right now
2014-03-19 18:48:04 +00:00
Matt Pass
686813e6be 4 new lanuages added
Erlang, Java, Julia and YAML
Need to handle commenting
2014-03-19 18:47:37 +00:00
Matt Pass
08c17154a8 4 new languages added
Erlang, Java, Julia and YAML
2014-03-19 18:46:55 +00:00
Matt Pass
0beb6df2c8 Erlang, Julia and YAML languages included
Java is part of the C Like language group
Julia available as part of CodeMirror minification helper, seperate JS
file used for now
2014-03-19 18:46:28 +00:00
Matt Pass
68a08d9636 Upgrade from 3.20 to 3.22
Includes a load of good bug fixes plus Erlang and YAML and 2 new themes
- MDN Like and Pastel on Dark
2014-03-19 18:44:32 +00:00
Matt Pass
5ea9c857e9 Version 4.0 beta 2014-03-15 14:24:42 +00:00
Matt Pass
147a3863a6 v4.0 beta 2014-03-15 14:12:57 +00:00
Matt Pass
fba79948c8 Formatting with indents only 2014-03-15 14:09:31 +00:00
Matt Pass
29e5dc0eae Language related items moved to seperate files
Makes it easier for users to customise languages supported
2014-03-15 14:09:06 +00:00
Matt Pass
949e5790a3 Clear and set bug interval and minor tweaks
If we have a bug path, start checking on bugs, otherwise clear interval
(needed when removing the paths during our usage
Don't push into our array, but set the array params on our i counter
px needed on CSS values
If our timer is 0, fall into an else statement and clear the interval if
it exists
Return false after handling shortcut for fold/unfold line
2014-03-15 13:33:36 +00:00
Matt Pass
b05e3f73b1 Darker input field BG's
Remvove not seen red BG that we also don't want
Input boxes have a darker BG now
2014-03-15 13:24:42 +00:00
Matt Pass
5dbf7982ce Can now check o multiple bug files
Only attempt to get filesize if file exists
Checking for bugs now in for loop to get bugs for each file specified,
counting the number of files with new bugs also
Output with a heading containing the filename (path) also
If it's our first bug file found, write to it to overwrite what was
there before, if it's a subsequent file, append to the file
Remove commented values
2014-03-15 13:22:37 +00:00
Matt Pass
5a82761df8 Ignore tmp/bug-report.log 2014-03-15 13:13:54 +00:00
Matt Pass
748c378ff8 Revised people list and stopped setting true 2014-03-15 13:11:42 +00:00
Matt Pass
edf297305d Don't intval, revised to GitHub & Crowdfund link 2014-03-15 13:01:50 +00:00
Matt Pass
869e2eb206 Darker arrow BG now 2014-03-15 13:00:44 +00:00
Matt Pass
d2149be2ef Tweaked margin top
Was clashing with text above
2014-03-15 13:00:28 +00:00
Matt Pass
c9399446eb Revised install details a little 2014-03-15 12:58:43 +00:00
Matt Pass
e7aa4b4507 Use file_get_contents with CURL as backup 2014-03-08 22:09:22 +00:00
Matt Pass
a0e3a04d1a Close bug report without saving prev or asking
So we can get a new one on each bug icon click
2014-03-05 08:14:52 +00:00
Matt Pass
210c92b52c Only look on strpos if we have bannedFiles
Causes empty delimiter warning otherwise
2014-03-05 08:13:19 +00:00
Matt Pass
a6435ec894 No longer pass back these JSON values 2014-03-05 08:12:46 +00:00
Matt Pass
aab8e5cb3d Bug checking - restarting and working with sizes
Bug report path, sizes seen and sizes actual available to fill with data
On change of settings. establish new settings for bug file paths, timer
and max lines, then start bug checking again
Bugs icon will now open file in top.ICEcoder.bugReportPath and on doing
this, set bug icon back to OK icon as we've seen bugs now
Fix to name of bug checking interval so it gets cleared
bugFilesSizesSeen set back to new empty array
files value in QS needs pipes not slashes
filesSizesSeen now instead of filesMDTs as we're not working from mod
datetimes, but sizes instead
Only if the sizes seen length doesn't match the file paths length do we
push null values in
Commenting out/deleting old bits to clear up a little
2014-03-04 08:15:39 +00:00
Matt Pass
b0743473f1 Output bugs to bug report file
Load common-settings.php and get 3 x querystring params, exploding first
2 into arrays
$result is OK to start with, but if we have a file that's not available,
set it to error
If we don't have an error, the seen sizes aren't null and the seen and
actual sizes don't match, we need to get bug lines
Set $result to bugs and some vars to begin with
fseek, ftell and while loop to get chunks of content using pointer
movement methods. We also reduce $chars and $lines here to escape the
while loop as required
$output has line endings converted and trimmed, before exploding on new
lines and only getting last few lines, stitched back together with
imploder
The bug report is written, $tmpLoc established and all data put into the
$status array to feed back in the XHR response
2014-03-04 08:07:48 +00:00
Matt Pass
7b04a95eda Establish jsBugFilePaths and pass that
Was in wrong array format before (PHP array as string)
2014-03-04 07:58:20 +00:00
Matt Pass
4b8e40b20e File setup as a placeholder and hardcoded $result
This roughly describes what needs to be done here I think re using
what's in the querystring, what needs updating (the JS MDT array) and
what should be set at the end ($result).

You can change $result to off, error, ok or bugs to see the icon change
accordingly
2014-02-28 12:36:55 +00:00
Matt Pass
70ca67b3d5 Bug reporting initial setup
bugReportStatus added, off to begin with
bugFileMDTs also added to contain a list of modified datetimes for bug
files being checked upon
On init, startBugChecking()
When using new settings, pull through 3 x bug related settings so we can
restart service (to do!)
xhrObj setup to return cross browser XHR object to make our calls
openBugReport will look to bugStatusReport and display an appropriate
message, for now
startBugChecking is the main function. If we have a timer, clear any
existing interval and start a new one
That then builds up a URL to call, with null values if items don't exist
(for error handling later on - to do!). The MDTs will need something
other than push, as this will all be called after changing settings. Use
the i int instead to hard set each array key & value (after clearing the
array)
The XHR call is made using our object and on a successful state, we
parse the result to read and handle the bug icon changing before setting
the bugReportStatus value. Need to also handle other states & statuses.
The status is set to 'ok' on restarting the bug checking function
2014-02-28 12:31:56 +00:00
Matt Pass
f5be67675b New process available on bug check
This is called after results are established.
$results and $status available for use and example shows logging them to
a file
2014-02-28 12:19:59 +00:00
Matt Pass
b2117ece23 Bug icon added in 4 colours
grey = off, orange = error, green = ok, red = bugs
2014-02-28 12:18:58 +00:00
Matt Pass
56688c3836 intval indentSize and 3 x bug items added
indentSize now has intval applied so we don't end up with blanks, get 0
instead
bug file paths, timer and max line settings now saved, paths as array
and other two as int's
Saved at the end of the settings chunk
Also passed to useNewSettings function, so we can restart timer on
change (to do!)
2014-02-28 12:18:29 +00:00
Matt Pass
3192015816 [?] icons, moved items & bug checking settings
Various notes moved/added into title tags of [?] to keep things neat (as
per help/shortcuts screen)
Plugin and file manager items now side by side in DIVs
3 x bug reporting items added - file path, timer and max lines
2014-02-28 12:16:18 +00:00
Matt Pass
b6884e05cb info added as notes now tucked into [?] icons 2014-02-28 12:10:43 +00:00
Matt Pass
f159d3710f Slight tweaks to positions and bug icon added
codeAsssist, goLine and view  all moved more to the right to make space
for the bug icon
bug class added and displaying as off to begin with
2014-02-28 12:10:07 +00:00
Matt Pass
51d9865dfc 3 x bug reporting settings and new icon
Settings being echo'd out now much tidier and 3 new settings pushed into
ICEcoder JS object
Bug icon added to far right with title and onclick event, plus ID as a
hook for later
2014-02-28 12:08:40 +00:00
Matt Pass
ecffe3a43e Bug file paths, check timer and max lines added
New settings to be used by the upcoming bug reporting system
2014-02-28 12:05:27 +00:00
Matt Pass
ddd7924960 Terminal link and function removed
It's now an installable plugin
2014-02-24 09:12:06 +00:00
Matt Pass
93798fce93 Terminal removed, now a plugin
It's not a core part of a code editor, so moved back to being a plugin
again
2014-02-24 09:11:06 +00:00
Matt Pass
0ad8c80514 Line break added 2014-02-24 08:33:40 +00:00
Matt Pass
b4d2947709 Refine the install instructions 2014-02-24 08:32:01 +00:00
Matt Pass
95f146a1c4 Stop CodeMirror handling Ctrl + Up/Down
It goes to start/end of file and doesn't get to our move line up/down
function
2014-02-21 11:35:36 +00:00
Matt Pass
6aa3f45ef4 Tweaked message for first 2, added Dropbox
Removed help message from areas already being covered
Added Dropbox option also
2014-02-21 09:37:45 +00:00
Matt Pass
1bcc773bba Working with FM menu and new functions
Setup namespaces for nav and 4 x list ID's
No longer updating fullscreen icon on change of mode
accountH is now fileNavH
Set the width of the 4 x lists -60px of width of file manager
account DIV no longer there and use new spritesheet positions for lock
icon
undo and redo functions added, plus indent function to handle more and
less indenting
autocomplete function added also
searchForSelected function added too, so not part of key handling
function, but function called upon, removed voke.fm usage
No longer need to change opacity levels on file manager icons
Stop using rightClickedFile and instead look to last item in
selectedFiles array
Function added to show/hide file menu, includes fade in/out effect
Function to handle clicking on file manager icons removed
Manual is now shown in popup at larger size
2014-02-21 09:26:55 +00:00
Matt Pass
116f8bdff7 On context menu instead select file
Don't set rightClickedFile
2014-02-21 09:15:41 +00:00
Matt Pass
c83e375e20 Icons have new position in spritesheet 2014-02-21 09:15:09 +00:00
Matt Pass
c73bd8f66c Removed header and file icons, menu in place now 2014-02-21 09:14:45 +00:00
Matt Pass
91ea437f37 Empty header area, replace icons with menu system
Determin isMac near top of file
Replace rightClickedFile with the last item in the selectedFiles array,
so we can get rid of that var
Header is now empty of icons etc, those options in menus
Icons above file manager removed, now within menus
Menu top links and lists set up with mouse over and out actions to
show/hide and fade in/out
2014-02-21 09:13:12 +00:00
Matt Pass
5b71272bc3 Icons reduced down to just the 4 needed 2014-02-21 09:06:27 +00:00
Matt Pass
51098b1ea3 Getting rid of old icons
Now replaced by menu system
2014-02-21 09:06:08 +00:00
Matt Pass
02565fa3b8 Getting rid of rightClickedFile
Now using last item on selectedFiles array
2014-02-21 09:04:57 +00:00
Matt Pass
4ebed7f960 Now has shortcuts title, no need for manual link
It's now available from the new menu
2014-02-21 08:53:48 +00:00
Matt Pass
8668c9ee3b No longer check key, just reset cmdKey 2014-02-18 09:11:45 +00:00
Matt Pass
c80cbbdc0a onBlur also resetKeys 2014-02-18 09:09:25 +00:00
Matt Pass
1584a7d1a6 Updated to match main JS file 2014-02-18 08:33:32 +00:00
Matt Pass
62ec680dc0 Slightly taller help and 2 new shortcuts added
To lock/unlock file manager and fold/unfold current line
2014-02-18 08:33:22 +00:00
Matt Pass
3d8bd14774 2 new shortcuts added 2014-02-18 08:30:44 +00:00
Matt Pass
59a749c5ce Don't need to work out file name now
This was legacy code that made use of the file extension. We now just go
by there being a { on the line.
2014-02-18 08:28:54 +00:00
Matt Pass
4124d64a58 Also need iceRoot in $dest path 2014-02-17 08:09:30 +00:00
Matt Pass
39398cecae intval on the timer and also set to blank if 0
Stops users entering values such as 'm' or '0' and will need to be 1
min+
2014-02-17 07:57:38 +00:00
Matt Pass
7df2a8c0ac Default type is text, 2nd array defines 'other'
Changed the default type to 'text' so ICEcoder will want to open any
file in the editor to begin with.
This is overridden by the images array and the newly purposed 2nd array
which defines types to instead pop open in a window (doc, docx, ppt,
rtf, pdf ...etc).
2014-02-17 07:47:51 +00:00
Matt Pass
cb5d3d8b1a Retstrict changes to plugins to auth'd users 2014-01-30 07:34:44 +00:00
Matt Pass
8b30c8b2eb Add getting plugin data via curl as alt method
Not all servers can get external data using file_get_contents due to
security retstrictions
2014-01-21 16:38:29 +00:00
Matt Pass
272bc177ce JS window redir incase headers already sent
This file includes settings.php which puts out a couple of JS vars, so
headers already sent and as a result, this page dies and goes nowhere.
JS window.location setup as a failsafe to do the same in that event.
2014-01-21 13:49:51 +00:00
mattpass
7c230cf09a Merge pull request #346 from ciubotaru/patch-1
Great, thanks for the fix. Merged
2014-01-21 01:11:14 -08:00
Vitalie Ciubotaru
638c61e014 Update plugins-manager.php
PHP Notice:  Use of undefined constant plugins - assumed 'plugins' in /[removed]/_editor/lib/plugins-manager.php on line 176
2014-01-21 18:02:54 +09:00
Matt Pass
ae864faa84 Version 3.5 2014-01-16 14:50:10 +00:00
Matt Pass
bfea966a14 Replace on SCRIPT_FILENAME
By replacing on this rather than __FILE__, we have a full file path and
can actually exclude the current working folder
2014-01-16 14:15:34 +00:00
Matt Pass
58e7c5ec42 preg_replace to remove full path prefix
Use preg_replace to only replace the first instance on a full path to
make it local
Avoids str_replace replacing all instances in the string
2014-01-15 10:39:31 +00:00
Matt Pass
080aaea4f7 Exclude from FM if its the ICEcoder dir 2014-01-11 17:44:22 +00:00
Matt Pass
eb634555df Exclude the dir ICEcoder is running from
After globalling $docRoot and $ICEcodeDir, work out a $localPath for the
file we have a result for
If our results match, we are looking in the ICEcoder dir and should
exclude as a result
2014-01-11 17:43:17 +00:00
Matt Pass
d42ea6f54b Establish the dir that ICEcoder is running from
Used to exclude from file manager and search results
2014-01-11 17:41:14 +00:00
Matt Pass
3c4a0eba6d _coder and ICEcoder no longer part of arrays
These 2 values were originally set to exclude showing ICEcoder based
files in the search results and file manager. However, some users will
install ICEcoder to another dir name, so removed these hardcoded values
from here and excluding in a better way in both instances.
2014-01-11 17:39:46 +00:00
Matt Pass
a7f3205edb Use left/right value from pluginPanelAligned to 0 2014-01-11 16:40:44 +00:00
Matt Pass
71875e8f5b pluginPanelAligned param passed to function
Contains left/right value, sets left and right values on plugins DIV
2014-01-11 16:39:20 +00:00
Matt Pass
bccc613de0 Allow updating of pluginPanelAligned
Also passed param to useNewSettings to update in the current browser
session
2014-01-11 16:36:00 +00:00
Matt Pass
accf9b0936 Plugin panel aligned option added
Allows user to set it to be left/right
2014-01-11 16:33:24 +00:00
Matt Pass
aa5ee237c9 Removed left: 0 value, now set via settings & JS 2014-01-11 16:31:57 +00:00
Matt Pass
1024c3ff50 pluginPanelAligned option added 2014-01-11 16:30:09 +00:00
Matt Pass
1c915d81da Added loginRequired bool
So you can choose if you need a login screen or not, true by default
2014-01-11 15:49:31 +00:00
Matt Pass
31aceb7226 Refactored and improved settings.php file
Moved huge chunks of isolated code to their own files
Reordered and improved remaining code
Lots of die messages added to stop code continuing after a header
location
!loginRequired now also setting loggedIn = true as demoMode does
Boot user to new login page instead of back to this page
loginRequired added to final elseif condition
Added 2 big notes re probably showing he login screen and continuing
with what we're doing
2014-01-11 15:48:23 +00:00
Matt Pass
8f06223c07 Display of plugins now handled here
Handled here rather than in settings.php file
$onLoadExtras = ""; and $pluginsDisplay = ""; also set here
No need to recreate the plugins array from POST'd values, now picked up
from a page load
If isset($_GET['updatedPlugins']) then update the new pluginsOptional
DIV innerHTML, no need to also check if the DIV exists
Also restart the plugin intervals upon $_GET['updatedPlugins']
No longer tacking content visibility onto $onLoadExtras
2014-01-11 15:36:27 +00:00
Matt Pass
73047549a6 Login now on own page, seperated from settings
No longer part of settings.php
Alt tag added to logo
Form action is now to login.php
Tabbing and line breaking around username now improved for source code
reading purposes only
2014-01-11 15:18:47 +00:00
Matt Pass
ade86eda6b previousFiles and last10Files updated here now 2014-01-11 15:15:44 +00:00
Matt Pass
03c0842ba2 Common settings/functions now in own file 2014-01-11 15:14:04 +00:00
Matt Pass
5dcfe80e71 Update condition moved to own include file
repPosEnd also now to plugins, not previousFiles, as moved position in
array
Plugins no longer updated here
2014-01-11 15:12:18 +00:00
Matt Pass
3e0f41b585 Removed plugins from settings screen
Added anagnam to credits as he let kindly me use webspace to test fixes
Plugins removed from settings screen now, set via plugin manager
FM root input field moved up now plugins area has gone
2014-01-11 15:07:40 +00:00
Matt Pass
887c7c1873 Plugins textarea not part of settings screen now 2014-01-11 15:03:35 +00:00
Matt Pass
67ab6c8f9c repPosEnd now to previousFiles, GET QS on update
End point immediately after plugins is now previousFiles as plugins has
moved in the array order
Tacked ?updatedPlugins onto the URL so we can pick this up and know what
to also action in plugins-manager.php
2014-01-11 15:02:31 +00:00
Matt Pass
af0e81e690 Position of plugins array moved
It's now updated from manager, not from settings screen
2014-01-11 14:59:39 +00:00
Matt Pass
e54d735614 Set content vis onLoad, plugins DIV, zip optional
Set visibility of content onload here, not tacked onto end of
$onLoadExtras
$pluginsDisplay now wrapped in a DIV with an id as a hook so it's
updateable
Only if we have the Zip-It! plugin should we display the option to zip
the file, as the plugin is optional now
2014-01-11 14:58:52 +00:00
Matt Pass
d298de35cf Copyright 2014 now 2014-01-11 14:45:02 +00:00
Matt Pass
c55c154856 Added note re setting perms on plugins dir also 2013-12-29 14:45:21 +00:00
Matt Pass
4a36e1ec64 showManual section and pluginManager function
showManual function can now take a section param and append to iFrame
URL to target a section of the manual if required. Used from Plugin
Manager only for now.
pluginsManager is a new function to display the Plugins Manager on
demand
2013-12-29 14:44:56 +00:00
Matt Pass
53d712b0ba Plugins Manager added
Allows you to install/uninstall as well as update the details of
installed plugins
2013-12-29 14:41:18 +00:00
Matt Pass
801597f91f Link to plugins manager added 2013-12-29 14:32:15 +00:00
Matt Pass
af0de2020e Plugins removed 2013-12-29 14:29:25 +00:00
Matt Pass
1a5540de98 Keep the plugins dir 2013-12-29 14:28:21 +00:00
Matt Pass
bac9dd697c Plugins removed
Plugins are no longer supplied with ICEcoder itself but now available to
install/uninstall remotely
2013-12-29 14:28:08 +00:00
Matt Pass
62c28202a0 Version 3.4 2013-12-20 11:55:12 +00:00
Matt Pass
33b47df99b Upgrade to CodeMirror 3.20 2013-12-20 10:35:06 +00:00
Matt Pass
58075d175d Upgrade to CodeMirror 3.20 2013-12-20 10:33:55 +00:00
Matt Pass
581cef9550 New loading animation by @tobiasahlin
New, more modern loading animation created by @tobiasahlin
Less code and far more awesome looking
2013-12-20 10:16:34 +00:00
Matt Pass
d393018cd3 Use nohref and put into onclick event 2013-12-20 10:12:43 +00:00
Matt Pass
67a2c86173 Always show dev mode message & add note
Now shows if dev mode is on/off and which file is being used
Added note also about how to put it into dev mode as people don't know
about this
2013-12-11 06:43:02 +00:00
Matt Pass
8918abde7e Remove HTML tags
These only display in title and alt tags, so should just be plain text
2013-12-11 06:42:02 +00:00
Matt Pass
b1277ab4a8 Update to match main JS file 2013-12-11 06:26:41 +00:00
Matt Pass
b692360fb0 File added to download specified file 2013-12-11 06:24:44 +00:00
Matt Pass
bbd96d39ab Download function added
Takes file param and calls new download file with file in QS
2013-12-11 06:23:42 +00:00
Matt Pass
6fcb600fd9 Download option added 2013-12-11 06:22:04 +00:00
Matt Pass
0da9371c4d Move event added
If we're due to move a file and it's writable, rename it to new location
Call move event once done to update file list
Show message if we failed or clear server message if all is OK
2013-12-11 06:20:20 +00:00
Matt Pass
209fb3be48 Moving files by dragging now possible
moveFile function added - takes oldName and newName and moves to that.
Also performs tab renaming as per rename function
updateFileManagerList function has new move event to add at new location
and remove from old
dropFile function updated to kickstart all of this with new moveFile
function call
2013-12-11 06:16:12 +00:00
Matt Pass
2817e9c34b Update to match main JS file 2013-12-08 16:13:22 +00:00
Matt Pass
ffed16ef15 Only setOption if we have a CM instance
Only focus on editor if we have a CM instance
On dragging files/folders, get the path if a file, otherwise go with the
folder path.
If we have CTRL key down, copy the selectedFiles and paste to the
tgtPath just established
Display temp message about move function coming soon
2013-12-08 16:11:59 +00:00
Matt Pass
43cc344b8b Check if we have a CM instance before focus 2013-12-08 16:06:55 +00:00
Matt Pass
0a4c4f14eb stopPropagation event added too onDragOver 2013-12-08 16:03:44 +00:00
Matt Pass
61a22c060e onDragStart and onDragOver events added
onDragStart now selects the file/folder
onDragOver kills the default event, so we don't get the not allowed icon
etc
2013-12-08 15:47:41 +00:00
Matt Pass
1e322fedcd Event should be onClick with nohref
cursor: pointer also added for pointer hand consistency
2013-12-08 13:33:50 +00:00
Matt Pass
0da7ca2e4d Change of security related headers & comment out
The X-CSP was stopping Firefox from working, complained about a CSP in
Emmet
Changed the security items, then found none were needed, so commented
out
2013-12-08 13:17:43 +00:00
Matt Pass
f134eca08b Drag & drop files into editor fix 2013-11-07 09:05:27 +00:00
Matt Pass
6c717e995a Version 3.3 2013-10-31 18:23:17 +00:00
Matt Pass
07f5a9b548 Removed css lint lib
It relies on a 310k lib from Stubbornella. Far too big.
2013-10-22 18:24:06 +01:00
Matt Pass
951637127b Removed images, using base64 URIs now
No need to have these anymore
2013-10-22 18:18:30 +01:00
Matt Pass
6aa2d0e533 CSS hinting now on SQL, CSS and XML
Applied with a smarter approach to the code here
2013-10-22 18:07:32 +01:00
Matt Pass
82b6af34ca Now using CodeMirror 3.19 2013-10-22 17:52:09 +01:00
Matt Pass
d91ea35dfe Update from 3.16 to 3.19
(Includes updates from the recent set of commits)
2013-10-22 17:51:45 +01:00
Matt Pass
1e0ff0dfd6 Now includes css hint, css lint and sql hint 2013-10-22 17:51:11 +01:00
Matt Pass
7147373d86 Now includes css hint, css lint and sql hint 2013-10-22 17:49:47 +01:00
Matt Pass
d86326aca8 License update 2013-10-22 17:49:29 +01:00
Matt Pass
b37a723296 base64 URI images used instead of 3 files
Also fixes to white-space and removed other experiemental classes
(Marijn H did all this)
2013-10-22 17:49:16 +01:00
Matt Pass
7af428572d Main CSS file updates 2013-10-22 17:45:17 +01:00
Matt Pass
0c2962ca15 New theme 2013-10-22 17:44:33 +01:00
Matt Pass
fcc1af71ec Theme updates 2013-10-22 17:44:13 +01:00
Matt Pass
77b7a88651 Use FILEINFO_MIME instead to get mime type
FILEINFO_MIME_TYPE is only available on PHP 5.3+ and on some servers
it'll use finfo_open but then get nothing back using this newer param
option.
2013-10-13 13:22:44 +01:00
mattpass
f6e508fbff Change to git clone command
Changed to full URL to be accessable by all
2013-10-12 20:28:44 +01:00
Matt Pass
1ef5f94953 Add draggable, ondrag and ondragend to new LI's 2013-09-27 08:06:32 +01:00
Matt Pass
9fbf1e7504 Dragging with key, drop file, paste URL functions
draggingWithKey is new param, to indicate which key we have down while
dragging, false if no key
pasteURL is new function to paste a URL into the editor. If CTRL/Cmd is
down, add the protocol and // as a prefix
draggingWithKeyTest - another new function, this will work out a key
that may be down whilst dragging, For now we set to CTRL (for CTRL/Cmd)
or false but could take other keys in future
dropFile is a final new function, when dropping a file, it will do
something. If we're in the editor area, paste the URL, if we're in the
files area, we'll move a file (a future update here). Finally, we set
mouseDown to false as we may have crossed from one area to another and
the event wouldn't trigger and flag not set otherwise
Also setting top.ICEcoder.area on mouse move, very useful so we can work
with that info (in the case of dropFile above)
2013-09-26 18:28:39 +01:00
Matt Pass
c67d93e869 On drop, get mouseXY for area
Also now sets the area in top.ICEcoder.area, useful for other purposes
2013-09-26 18:19:48 +01:00
Matt Pass
57d96b0bf9 Files/folders now draggable
LI tags now draggable
On drag, test if we are dragging with a key down. Also focuses CM editor
to show the cursor incase we want to drop into code and we'll then know
position
On drag end, perform a dropfile function
2013-09-26 18:18:05 +01:00
Matt Pass
50d2dadea2 Added note for disabling XSS filter method 2013-09-26 18:15:22 +01:00
Matt Pass
bf755abbf4 Set a policy of allowing scripts on same domain
Chrome now has tighter rules via security auditorm this line needed to
allow x-frame script use
2013-09-26 11:55:54 +01:00
Matt Pass
ebc2764aab Update to match main JS file 2013-09-25 10:12:06 +01:00
Matt Pass
2912e351f5 savedPoints plus function removed and improved
savedPoints now replaces changedContent
It's role is also different - it contains the integer change num from CM
on load/save/revert etc. We can compare this against the current change
num provided by CM (changeGeneration) to see if content has changed
Removed redoChangedContent function. This was only called once (by
editor.php) on all keyup's and we used ropey key detection to set
changedContent. As we're no longer storing changed doc values, we no
longer need this, and as redoTabHighlight is already called on CM change
(much more efficient BTW), we now don't need this function at all
getcMInstance can now accept a tab number, 'new' string or nothing (both
those last 2 use selectedTab)
Wrap fMIconVis setting in an if condition so we don't try to set it when
doc isn't there yet
All instances of changedContent now savedPoints where it still remains
2013-09-25 10:06:47 +01:00
Matt Pass
f0e47e07bc Compare all docs savedPoints before window close
Now looping thru all instances and comparing savedPoints against
changeGeneration integers
If we find a non match, we have unsaved content
2013-09-25 09:54:03 +01:00
Matt Pass
ee917776f0 Set savedPoints on reverting, load or save
On reverting set back to the changeGeneration integer
On loading set to the new changeGeneration integer
On saving set to the current changeGeneration integer
2013-09-25 09:52:16 +01:00
Matt Pass
fe2719a6e3 savedPoints now plus compare to changeGeneration
Array is now called savedPoints and has different role to changedContent
Compare to changedGeneration when determining if a doc has changed
2013-09-25 09:49:06 +01:00
Matt Pass
0765ab378b Condensed screen layout & removed function calls
Left column of info display now 300px wide and also contains your device
info
Also removed some line breaks, result of this is a smaller screen area
needed, less likely to get double scrollbars using ICEcoder on smaller
screens
No need to call redoChangedContent anymore, removed that function
No need to set changedContent array. It's now savedPoints array, only
updated on save not changes
2013-09-25 09:47:38 +01:00
Matt Pass
0c9db2c573 Only do next/prev tab if CM doesn't have focus
Was falling back to this onMouseWheel when editor window was at top and
we scroll up or at bottom and we scroll down, resulting in suddenly
switching from scrolling content to tabs. This if condition fixes that.
2013-09-20 18:06:43 +01:00
Matt Pass
12a8f2e81c Wrap in if plus delays on findReplace
onKeyEvent actually happens on multiple events (keypress and keyup at
least)
Wrapped in an if statement now so we only trigger half the time, meaning
half the work, meaning improved usage
Clear any existing timeouts and set a new Timeout to trigger the
findReplace action in 0.5s
This means as you type it's continually clearing & setting timeouts
When you pause typing for more then 0.5s, then it'll trigger the
findReplace
The result is no lag whilst typing and giving find results within
inactivity time only
2013-09-20 17:33:11 +01:00
Matt Pass
ace40e0c29 Trigger function on mouseover, mouseout & click
Get rid of inline JS param setting and now call new showHidePlugins
function on these events
Added an ID to this so we can target this pane
2013-09-20 17:28:33 +01:00
Matt Pass
c9e163a2df showHidePlugins function added
Sets width and BG depending on wanting to show/hide
If we're showing, also perform an expand on the file manager incase it's
collapsed
(This is so we get to see both FM and plugins panes)
2013-09-20 17:26:57 +01:00
Matt Pass
93d717c1aa Version 3.2 2013-09-19 20:57:54 +01:00
Matt Pass
b3510dfb67 Remove empty lines on cursor move
beforeSelectChange stores the previous line number
On cursor activity now it works out if the line we were on would be
empty if we removed white space and if so, clear the line
2013-09-19 20:24:43 +01:00
Matt Pass
5c347829a2 Reduce content height by 2px for bottom bar 2013-09-19 20:22:49 +01:00
Matt Pass
89e34fb24e No margin needed on new icon 2013-09-19 20:07:22 +01:00
Matt Pass
9160b5cc8f Only CSS beautify if it's a CSS file 2013-09-19 20:07:03 +01:00
Matt Pass
00b02af6e6 New icon added
Couldn't wait for Sencha to get back to me about using their logo
anymore
2013-09-19 20:06:45 +01:00
Matt Pass
6701c18929 Paraiso light has lighter active lines 2013-09-17 09:53:02 +01:00
Matt Pass
659befd66a Updated to match main JS file 2013-09-17 09:48:26 +01:00
Matt Pass
424992a783 CodeMirror 3.16 upgrade & 3 new themes
Paraiso (dark & light) plus The Matrix themes
CodeMirror also includes XML hint now to make HTML hint work
2013-09-17 09:47:23 +01:00
Matt Pass
0ab6745704 XML hint included
XML hint needs to be included to have HTML hinting
margin-left added to offset border-left
CoffeeScript hinting added also
Extra function added to handle autocomplete on keypress with a debounce
timeout on 200ms
2013-09-17 09:25:18 +01:00
Matt Pass
927471e165 Settings 10px taller, offset tabs & autocomplete
Settings screen now 10px taller to help accomodate new Autocomplete
setting
Visible tabs have -1px margin left offset
Autocomplete updated live in session on settings change
2013-09-17 09:19:00 +01:00
Matt Pass
72cd067341 Settings screen 10px taller 2013-09-17 09:17:09 +01:00
Matt Pass
0128499d73 Autocomplete setting added
Saved when updating settings
Also updated in current session
2013-09-17 09:15:33 +01:00
Matt Pass
9c4a74c406 Tab margin offsetting and autocomplete setting
Tabs now have -1px left margin to offset 1px left border
Heading moved to side panel and some line breaks removed, to make way
for new setting
Autocomplete setting added, options for ctrl+space and keypress
ctrl option on this and also tag wrapper command now show as ctrl/cmd
Change margin-left value on change of visible tabs setting
2013-09-17 09:14:47 +01:00
Matt Pass
8e139c481c Autocomplete option set in JS from PHP 2013-09-17 09:10:34 +01:00
Matt Pass
45ad87c2eb Remove margin-bottom and decrease padding 2013-09-17 09:10:08 +01:00
Matt Pass
cee91cc2d3 AutoComplete setting added
ctrl+space default (can also be keypress)
2013-09-17 09:09:43 +01:00
Matt Pass
f4e2f24f65 JSON added as a supported filetype
Need to only add to array and a CSS classname
2013-09-16 08:30:52 +01:00
Matt Pass
f0da80b886 Can now provide a fileList to delete
Produces less code and opens this up to the API, so we don't just have
to delete selected files
2013-09-13 17:43:56 +01:00
Matt Pass
cf11fb5c3d Collapse plugins pane on clicking 2013-09-13 17:42:02 +01:00
Matt Pass
729b48566e Only attempt to beautify if we have a cM instance 2013-09-13 17:41:42 +01:00
Matt Pass
4f97378655 CSS Beautify plugin added 2013-09-13 17:12:50 +01:00
Matt Pass
1a848823c5 Added note about ISE and using 755 in that case 2013-09-13 16:19:29 +01:00
Matt Pass
526edbaca7 CSS overhaul cleanup
Combine transition properties to cover both, reduce time to 0.07s and
ease-out only
Remove .codeAssist input of 0 margin-top, not needed
Code Assist and Go to Line text now eee, matching find/replace text
Goto line slightly wide to accomodate 4 digits plus padding left of 4px,
no longer centre aligned
Remove old system classes, no longer there
2013-09-13 16:12:39 +01:00
Matt Pass
fa98c842d0 New tab now 22px wide after removing borders 2013-09-13 16:05:57 +01:00
Matt Pass
c7a0a4a493 New tab now 22px wide after removing borders 2013-09-13 16:04:34 +01:00
Matt Pass
cfa3fd69e0 Property-fix - should be border-left-width 2013-09-13 16:03:17 +01:00
Matt Pass
e3bc4db204 Syntax formatting tweaks only 2013-09-13 16:01:39 +01:00
Matt Pass
6589e819f4 Property fix - should be border-left-width 2013-09-13 16:00:15 +01:00
Matt Pass
eefaebace8 Updated to match main JS file 2013-09-12 17:52:34 +01:00
Matt Pass
35887450ce Removing some old bits
fmLock no longer a DOM elem at this level
removed footerH altogether now
Altered some hardcoded values for header and account heights
2013-09-12 17:51:39 +01:00
Matt Pass
0f74645173 Removed unneeded px 2013-09-12 17:50:27 +01:00
Matt Pass
3388e090bb Remove dup margin-left, should be 3px 2013-09-12 17:50:09 +01:00
Matt Pass
1d50425de1 Tabs have border-left instead of content arrow
To now provide lines to show indentation
2013-09-11 17:09:01 +01:00
Matt Pass
4b69c44559 Complete revamp to give a flat design style
Plugins class added for pane & on z-index 3 so above everything else
here
Header now only 20px high and z-index lowered to 1
Version now called logout as it doesn't contain version no anymore, now
absolutely positioned
Files on a higher z-index and has no drop shadow now
Account is taller, tho not as much margin-top and same colour as files
pane, so blends in
Account icons moved, adjusted and removed
Close all tabs and alpha tabs only have BG on hover and it's lighter too
newTab doesn't have borders to left & right now
Find & replace elems have complete reworking to make them straight with
less styling
Selects, checkboxes & inputs have new, non standard look
Tabs no longer have border radius on top
Footer on lower z-index than file manager pane now
Removed inset box shadow from all textboxes
2013-09-11 16:41:03 +01:00
Matt Pass
c673beab9d Old tools & plugins removed from header
These are now in their own side panel pane, not in header
2013-09-11 16:29:01 +01:00
Matt Pass
ce5b63a91c Revised layout to simplify & give flat design
Plugins panel added, expands into view on hover
Remove other clutter from page to simplfiy such as version number, old
view page icon and system tool area to bottom right
Lock now part of the file manager
All 3 select dropdowns are now styled using CSS tricks, as is the
checkbox
Preview now to right of go to line
2013-09-11 16:23:51 +01:00
Matt Pass
660d44cd76 Removed system area & old viewPage link function 2013-09-11 16:13:33 +01:00
Matt Pass
3922ffcafb Changes to fit new style and bug fixes
More subdued tab colours for normal tabs (BG & FG)
Slimmer header and no footer to consider
No need to set margin left pos of lock, it's moved to within files.php
For this reason, we need to change our DOM targeting
Only focus or do CSS colour blocks if we have cM
Because the file manager is now the whole height we no longer consider
if the Y mouse is > 40 or < 30 from bottom
Checkbox now styled and using a BG, so set the pos on change
2013-09-11 11:16:07 +01:00
Matt Pass
6d84279d46 Lock added to file display, above refresh icon 2013-09-11 10:59:24 +01:00
Matt Pass
bfbac046db No need for top margin
File manager list now moved upwards
2013-09-11 10:58:57 +01:00
Matt Pass
3d071d8687 Lock now part of file display area
People overlooked the lock icon and then asked how they could collapse
the file manager
By having the lock within the display area it should bring more
visibility to it
2013-09-11 10:58:22 +01:00
Matt Pass
330d668d07 Line breaks after plugins
Now laid out vertically rather than horizontally
2013-09-11 10:57:00 +01:00
Matt Pass
d07b5c550c New icons added to tie in with new style
Terminal now in side plugins bar, select dropdowns and checkboxes styled
2013-09-11 10:56:34 +01:00
Matt Pass
3fbbeb0c5d Improved icon to work on a dark BG 2013-09-11 10:55:15 +01:00
Matt Pass
637a853141 New close all icon and revised alpha tabs icon
Close all icon is black, so needs to be a different image to standard
close icon
Alpha tabs icon is now < > arrows rather than an A symbol
2013-09-11 10:54:40 +01:00
Matt Pass
28387df059 Revised file manager icons
Also added flat design alternative
2013-09-11 10:52:50 +01:00
Matt Pass
6765770dea Revised & reduced plugins
Removed Dochub, Regexplained, TinyPNG, Voke and Wireframe CC plugins
(they were only URLs to useful services, didn't integrate with ICEcoder)
Remaining icons revised alpha channels where needed to work on dark BG
2013-09-11 10:51:47 +01:00
Matt Pass
43d22c40a8 Ignore old and new files in tmp 2013-09-11 10:48:48 +01:00
Matt Pass
438aa25cc1 TinyPNG compressed images.
Reduced by about 83%, from about 3.2k to 600 bytes
2013-09-05 18:37:32 +01:00
Matt Pass
98a340a751 Version 3.1 2013-09-03 08:26:22 +01:00
Matt Pass
568cb08e4a Check if lib/settings.php exists first
Because we may include this file from a couple of dirs and I'd rather it
continued to be run from lib/settings.php. By doing it this way round,
we're ensuring this, as lib/lib/settings.php won't exist.
2013-09-03 08:10:21 +01:00
Matt Pass
93c76533d6 Undo a few CodeMirror stylings on lint icons
Reuse my 3 x PNG files again
2013-09-03 08:09:00 +01:00
Matt Pass
64a7520466 Initial updater script
Stores old versions with timestamp in dir name
Copies new version into a new dir
Detects & downloads the latest zip file
Unzips and if all went well, directs to the new version
Provides info on it's progress and also a message if things go wrong
2013-08-30 09:06:00 +01:00
Matt Pass
1b7d647d60 Allow settings to be called from root or a dir
By doing this we don't end up with a lib/lib path issue
Used longhand if else statement instead of ternary for clarity
Also added die to stop it going any further and having a new header
location replace this one
2013-08-30 09:01:10 +01:00
Matt Pass
046bec29b2 Update function added
Shows confirm message and then either auto updates or opens ICEcoder
depending on user clicking OK or Cancel button
2013-08-30 08:35:59 +01:00
Matt Pass
13df17f236 Update button added
Clickable to the new update() function
2013-08-30 08:33:28 +01:00
Matt Pass
631de2350d tmp folder added to store temp files 2013-08-30 08:31:57 +01:00
Matt Pass
aa8ac56ff7 Install details now include write perms on tmp 2013-08-30 08:31:37 +01:00
Matt Pass
8df54367c5 2 new themes are light, need grey current line
3024-day and base16-light
2013-08-11 17:18:53 +01:00
Matt Pass
a194aad9e9 Fix size of the shown select menu
New options with longer names caused options to the right to shift along
2013-08-11 17:17:53 +01:00
Matt Pass
fd2197eace SQL mode added
Chose MySQL as the default dialect, others possible so added a comment
on that
2013-08-11 17:07:50 +01:00
Matt Pass
c0983e0a62 Update to v3.15, new themes and SQL mode 2013-08-11 17:04:53 +01:00
Matt Pass
4df33254d0 Moved the placement of tagWrapperCommand
To fit in with placement on settings screen and match settings file
2013-08-11 16:05:34 +01:00
Matt Pass
1c7fb3b61c Lowercase like other settings 2013-08-11 16:04:45 +01:00
Matt Pass
c592e704ba Minor tweaks only re tag wrappers
No need to hardcode setting in the main ICEcoder object
Moved function param for tagWrapperCommand placement
Minor syntax tweaks for consistency
Also removed now old comment
2013-08-11 16:04:25 +01:00
Matt Pass
e92662fd9b tagWrapperCommand setting moved
Needs to be in the section updated by settings.php, ended up with
duplicate array settings
2013-08-11 16:02:20 +01:00
mattpass
1dbc102cfc Merge pull request #304 from pushreset/alt_left_tag_wrapper
Great. May make a couple of small tweaks but overall seems good. Many thanks.
2013-08-11 06:42:23 -07:00
pushreset
65c77f7d93 Choose tag wrapper combination 2013-08-10 18:22:55 +02:00
Matt Pass
e715d02ea1 Can now move multiple lines up/down
Also added comments to help with understanding
2013-08-09 09:06:31 +01:00
Matt Pass
e5fac3efa3 XML added as a filetype & nest indicator fixes
Nest indicator now works with XML too
Set cx as false and then set if we have a matching object structure
Do nest indicator even if we don't have a html or body tag, as we may
have XML
Always show 'content' after the nest tags, except if it's JavaScript
2013-08-09 07:35:44 +01:00
Matt Pass
4eb6d699c1 XML added as a filetype 2013-08-09 07:32:25 +01:00
Matt Pass
5c80c1eb94 Call upon CM's redefined object structure 2013-08-09 07:31:31 +01:00
Matt Pass
60cbfd486c Call switchMode after saving
So it colors code after saving new files, renames to a different file
type etc.
2013-08-07 20:09:43 +01:00
Matt Pass
a5b36447b3 Updated to match main JS file 2013-08-07 18:55:32 +01:00
Matt Pass
ce62da5b5c Populate new results bar. plus tweak & bug fix
lineCount and charCount are var's no longer used, removed
Add scrollBarVisible var, is true or false depending on if we have a
scrollbar
Removed numChars and charsToCursor vars as we're now using
cM.indexFromPos which gives the same result, but using CodeMirror so
probably more efficient
A new ICEcoder.resultsLines array is now available, populated with
unique line numbers of found results
4 other new vars added for new functionality and also filesQS which I'd
missed adding before
New functionality to create colored blocks and add into the container,
at heights determined by the amount of content and colored according to
which line we're on
Else clause added to clear results and this container if we have a blank
find string
2013-08-07 18:47:21 +01:00
Matt Pass
5e4a185e9d Add a results bar to the editor 2013-08-07 18:23:52 +01:00
Matt Pass
08765c7957 Ignore config-*
Don't be as specific to include .php too, because we want to exclude
.old also
2013-08-07 18:22:27 +01:00
Matt Pass
28e71adaf5 Reduce heading tag wrappers down to h1-h3
This is because AltGr+4 is used by { on French keyboards, it's a $ on
Turkish keyboards etc
Many people won't go beyond h3 anyway and so it's best to have h1-h3 and
have AltGr+4 working as expected for non English keyboards
2013-08-05 16:28:29 +01:00
Matt Pass
ea79d2900e Version 3.0 2013-07-25 08:34:47 +01:00
Matt Pass
28c59f88e9 No line param on function and tweaked comment 2013-07-25 07:59:26 +01:00
Matt Pass
fb3dc200fb Base16 Dark theme added 2013-07-25 07:59:01 +01:00
Matt Pass
e7223c96b7 2 new contributors added 2013-07-25 07:21:31 +01:00
Matt Pass
90a531d2a8 focus method added and only actions if not iThing
CodeMirror focus method was causing no keyboard issues on
iPad/iPhone/iPod
All focus() calls nowrunning through new focus method, which acts as a
single point to do this
Will not do this if iPhone|iPad|iPod test is true
2013-07-25 07:17:09 +01:00
Matt Pass
1f1c71b218 cmdKey flag setup & usage
Also slightly taller help screen as Ctrl+space shortcut is added
Also resetKeys on open webpage or get info window
2013-07-24 08:27:16 +01:00
Matt Pass
b39fdaca95 cmdKey added as alternative to ctrlKey 2013-07-24 08:24:33 +01:00
Matt Pass
65039feeba Cmd/Ctrl shortcuts, Ctrl+space added and [?] info
Now showing Cmd or Ctrl after detecting if we're on a Mac from User
Agent
Ctrl+space shown as a shortcut now
[?] added after a couple of shortcuts that require popups to be enabled,
title used as tooltip
2013-07-24 08:23:51 +01:00
Matt Pass
c62dabc3e3 Mac shortcuts shown if appropriate
Detect Mac on User Agent and show Cmd/Ctrl as appropriate
2013-07-24 08:12:33 +01:00
Matt Pass
b1f22c4421 Find bar same color as gutter and editor now 2013-07-23 08:55:31 +01:00
Matt Pass
2814739c1e Toned down colors by 20%, gutter BG color change
Also toned down line numbers
2013-07-23 08:55:05 +01:00
Matt Pass
d2cb97ab0a Comments added and a couple of fixes
Condensed code on checking if find or replace are the active elements
Fix to remainder string used by function snippet, needed 1 char more
2013-07-22 09:05:06 +01:00
Matt Pass
98514ac46f Set highlights once folder anim done
Was previously attempting highlights on folder open, needs to be when
anim is done
2013-07-21 19:00:01 +01:00
Matt Pass
aaa10a5fff File menu won't get cut off & minor syntax tweaks
Remove unused vars & whitespace
File manager menu won't get cut off if we trigger it near bottom of
screen. Now works out height of it and takes that into account so the
bottom sits 5px from the window.innerHeight bottom
Redo working out chPos in a more logical way
Tidy up formatting etc and add comments
Only run file.replace once, set in var
2013-07-21 18:51:13 +01:00
Matt Pass
49c3f0e4bb Consider undo history size don't just set to 1
Need to consider if we've undone back to the start instead of just
setting 1 here
2013-07-21 18:46:57 +01:00
Matt Pass
673c779ca5 Condense, improve, reduce & fix find/replace
Only action replace on buttonClick (same as replace all), as having a
result selected and changing replace value can replace selection without
a button click, which is undesirable
if condition was wrong, should be based on if we already have that char
ref point in ICEcoder.results
Remove old code re counting no of chars previous to cursors line, and
other old chunks of code that seem to do nothing
Use a much shorter and more efficient way to count chars to our cursor
now
Same for building up filesQS, just join the array values with a colon
2013-07-18 18:04:45 +01:00
Matt Pass
8c74c7a77c autoOpenFiles if fmReady
New fmReady var, set to true when the file manager is ready
An interval is set up and auto opens files as soon as this var changes
Simplifying for loop
2013-07-18 06:50:07 +01:00
Matt Pass
376d564004 Set $GET location to generate branch
We're now using branch generating for the root on init, so we use the
same single system.
We also get the animated effect on init of the root as a result.
2013-07-17 13:33:47 +01:00
Matt Pass
26f3265299 Hide branch DIV, set fmReady to true once
The branch DIV is now a temp DIV only and not seen. Previously it was
seen onload of ICEcoder as the display of the root. However, there were
inconsistencies in line returns etc and so now even the root has a
branch built for it on load. ie, the init load and branch generating use
the same system.
Set fmReady to true if not when finished animating the folder. This only
happens on load of course and means we run init afterwards
2013-07-17 13:32:24 +01:00
Matt Pass
d3d5554969 Lots of minor tweaks and code condensing
Text and comment improvements and additions in many places
Can now just use window.innerWidth/height, no need for ternary condition
Simplifying an if and ternary condition
contentCleanUp should happen on all files
Put the line swapping into 1 operation so an undo makes sense
Replace document.getElementById() with top.get() in many places
Add/remove vars to avoid global leaks/clear away old vars
Use break instead of escaping through var setting
Add != "/[NEW}" to if condition so we can open multiple new files
Remove old code re switch tabs to open file, this is handled by isOpen
if condition now
Condensing a lot of code on deleteFiles function
Condensed code a little on showMenu function re folderMenuItems
2013-07-16 17:41:12 +01:00
Matt Pass
5ea3854043 Change info to refer to new location of setting 2013-07-16 17:32:22 +01:00
Matt Pass
ca08a101d1 Note on using CTRL+J to jump back as well 2013-07-16 17:32:02 +01:00
Matt Pass
d4de692822 Replace www. in settingsFile name
Means both www. and blank subdomains share the same file
2013-07-12 07:38:21 +01:00
Matt Pass
2dc702efc6 Animate folders & files into view
Shows a new folder/file every 4ms to give the impression of animating
into view
2013-07-11 09:50:41 +01:00
Matt Pass
8601363d46 Don't focus if we press space in replace field 2013-07-11 07:41:31 +01:00
Matt Pass
110a342bb1 Style tweaks & lint obeys codeAssist setting
solarized and xq-light themes should have lighter active line
foldOff should be a white block with very low alpha, so it looks good on
themes with a light gutter
We should only JS lint if we have codeAssist on (and it's a JS file)
2013-07-10 17:32:32 +01:00
Matt Pass
e4caebc368 Updates to match main JS file 2013-07-10 17:30:10 +01:00
Matt Pass
934d353537 codeAssist set from settings, fixes to updating
codeAssist is now set along with other settings in index.php
solarized and xq-light should have lighter active lines too
If codeAssist isn't the same as out session setting, set it to the
updated setting and toggle the switch
Adjusts to CSS stylesheet targeting. New CSS file meant it's now
position 4 in the array and child item 4 where we'll find the content
style
I also changed background to background-color on the activeLine style
2013-07-10 17:29:58 +01:00
Matt Pass
11465d1946 codeAssist now set along with other settings
Also applied to checkbox so not always starting as checked, obeys user
settings
2013-07-10 17:25:55 +01:00
Matt Pass
fdc5bc34fd Tweak to if condition to not convert UTF8
Otherwise we are UTF8 encoding the UTF8 encoding and special chars can
get messed up
2013-07-10 16:18:59 +01:00
Matt Pass
10a91df31c No longer needs script tag
It is called from within a script
2013-07-10 07:44:02 +01:00
Matt Pass
c503830c25 Update to match main JS file 2013-07-08 13:25:33 +01:00
Matt Pass
0195524f17 Condensing & improving code
Alt added to logo
Outputting the Twitter list in a shorter way
Imploding 4 sets of array items instead of using a for loop
2013-07-07 15:43:47 +01:00
Matt Pass
c2ce4bed8f Help screen 50px less, only focus if not in find
Also only focus if we have an open file
2013-07-07 15:42:36 +01:00
Matt Pass
fd8b77a9df Use get function where possible 2013-07-07 15:38:58 +01:00
Matt Pass
4b83741dbe Refresh icon now has a fixed position
Was in slightly different positions in different browsers
2013-07-07 15:38:17 +01:00
Matt Pass
ab5fbe8a9c Reworded a lot on the help screen
Revised a lot of the wording here to be clearer about usage and be more
in line with new functionality
2013-07-07 15:37:44 +01:00
Matt Pass
30aef59c55 Change prefixes, tab heights
Making steps towards supporting IE by adding ms as a prefix
Remove moz prefixes as it now supports transform
Remove webkit and moz transition prefix variants, supported as standard
now
Tabs and new tabs now have a height to standardise across all browsers
(Firefox and IE showed 1px gap)
2013-07-07 15:34:29 +01:00
Matt Pass
813d5f01dd Increase salt length to 12, handle line breaks
Increase salt from 9 to 12 chars to move along with technology
Replace all backslashes with 2. This means we escape PHP and then JS to
ensure we will maintain \n instead of ending up with a line break
2013-07-07 15:29:37 +01:00
Matt Pass
040a19a400 Remove o prefix and add ms
Looking towards supporting IE10 and IE11 as a browser
2013-07-07 15:27:46 +01:00
Matt Pass
13a5298be7 Remove o prefix add ms
Opera now uses webkit and as IE10 is becoming a better browser, I'm
taking steps towards supporting it by adding a prefix for no user
selects
2013-07-07 15:27:09 +01:00
Matt Pass
b366e47197 Condensing code, only need $renamed once 2013-07-07 15:25:32 +01:00
Matt Pass
9bbc41d7b7 Remove all the script tags
This not only saves bytes but I suspect opening & closing so many in
succession is causing a problem.
About 1 in 50 times it wouldn't get all the way through the file, it
would stop somewhere near the end
2013-07-06 19:45:27 +01:00
Matt Pass
4a8703d5f0 duplicate Lines and removeLines enhancements
Both functions can now duplicate and remove multiple lines as well as
specified line or current line
Tries to handle duplicating intelligently with line breaks if selection
ends at a line end getting a line break
2013-07-06 18:09:10 +01:00
Matt Pass
dcb5c886fa Function is now plural as it handles multi lines 2013-07-06 18:05:40 +01:00
Matt Pass
fbc6425a13 Ignore test-file1.txt
Altered by mistake
2013-07-06 18:05:10 +01:00
Matt Pass
332f2a492d Wrap & unwrap with same shortcut
Will now unwrap selection with same shortcut
Works for all tag wrapper shortcuts except for div and span where you
may want to nest
2013-07-06 17:14:14 +01:00
Matt Pass
86cab45ce2 Ignore test-file1.txt 2013-07-06 17:11:25 +01:00
Matt Pass
0759aad72f Adminer updated to v3.7.1 2013-07-06 17:11:08 +01:00
Matt Pass
9781a05d78 Compressed file now contains 3 libs
trailingspace, javascript-lint and lint now contained in compressed file
Made note of this and also sorted list into alphabetical order
2013-07-06 17:10:35 +01:00
Matt Pass
8c61b0ebc0 Ignore test file 2013-07-06 15:04:08 +01:00
Matt Pass
1d8f8dcdf9 Remove extra condition, left over 2013-07-03 14:47:10 +01:00
Matt Pass
8716026ae8 Only check on fileName if it's there 2013-07-03 14:46:58 +01:00
Matt Pass
6dbef7c929 Darker help icon
To match the others better
2013-06-30 13:03:58 +01:00
Matt Pass
47775ac085 New icons for error, warning and multple
3 icons added as PNGs for visibility and editability, adjusted CSS file
to suit
New icons are improved and refined from those originally set up
2013-06-30 12:50:52 +01:00
Matt Pass
51aa38764a Apply the linting to all JS files
Cycle thru all open files, and if it's a JS file, apply or remove the
linting option
2013-06-30 11:54:31 +01:00
Matt Pass
2b8010c24a tabsBar now at 53px, move 2 icons along 3px 2013-06-30 11:47:04 +01:00
Matt Pass
8a24eeff24 Remove old lint system, layout adjust for gutter
Remove updateHints function, upgraded to new gutter based JS Hint system
On toggle of codeAssist, clear the gutter and set lintWith to false if
we're turning off
1st tab position is now an extra 12px, so 53px not 41px
2013-06-30 11:45:39 +01:00
Matt Pass
863ece66fa JS Hinting and extra gutter added
Include linting files (1 x CSS and 2 x JS)
Include JSHint as part of the system now, instead of as a plugin
Remove old lint-error classes and waiting/widgets arrays
Added extra gutter for the lint markers
Lint with JS validator for JS files, false otherwise
No need to set or clear timeouts for updateHints
2013-06-30 11:42:03 +01:00
Matt Pass
b8f696ad69 Lint & JS Lint addons included
Also change the CodeMirror-lint-markers class to be width: 12px;
margin-left: 2px; instead of 16px
2013-06-30 11:37:42 +01:00
Matt Pass
40b31c7d00 No longer check if this exists, used elsewhere 2013-06-30 11:35:51 +01:00
Matt Pass
d85983bbe9 Update to JS Hint v2.1.4 & part of system now
JS Hint removed as a plugin from the plugins folder, now in it's own
folder like Farbtastic or Terminal
Upgraded to v2.1.4 and uglified it. Now it's up to date and 40k smaller
than the previous (unminified) version used
2013-06-30 11:35:19 +01:00
Matt Pass
143e006e55 Update min JS file to match main JS file 2013-06-29 23:33:40 +01:00
Matt Pass
68a8d6e052 Close folder contents before hiding
This will openClose a folder without requesting a reload. This means if
it's a closed folder it will stay closed and if it's an open folders it
will get closed. This is done before hiding the folder, without this the
child contents will still be seen even though the parent folder display
itself is hidden.
Function is now named deleteFiles
2013-06-29 23:32:50 +01:00
Matt Pass
ca22316ae4 Set root to blank to avoid double slash in path 2013-06-29 23:29:21 +01:00
Matt Pass
46c0ec9c63 No need to unset selectedFiles on new paste 2013-06-29 22:26:38 +01:00
Matt Pass
c9d4be3d1c Open and Duplicate options plus hr breaks
HR added to file menu to break it up into logical sections
openFilesFromList is more accurate function name now
copyFiles and deleteFiles now has selectedFiles array passed as param
duplicateFiles is a new option added between these
2013-06-29 22:25:54 +01:00
Matt Pass
f9b008f7d2 Natural comparisons and duplicate file function
Comparisons on files such as xyz9.txt and xyz10.txt would come out as
xyz9.txt being higher and cause issues as startFile and endFile would be
the wrong way round. I'm therefore now comparing on regex replaced
values, where numbers may be prefixed by up to 20 zeros (note
substr(-20) to right align our value.
delete, copy and paste file functions now plural as they handle multiple
files.
copyFiles works with a given fileList and not just the selectedFiles
array. Also passing params to control if we hide or show paste option
and file menu
pasteFiles will refuse to paste the root, that would cause bad looping &
compound pasting issues
duplicateFiles function added which takes a snapshot of the copiedFiles
array, copies the files while not showing paste menu or hiding menu. It
then sets the paste location to be the parent of the duplicate target
and pastes into that location. Once done copiedFiles is returned to the
snapshot image.
2013-06-29 22:20:18 +01:00
Matt Pass
f2474ba8da Open option added & pass thru selected files list 2013-06-29 17:47:07 +01:00
Matt Pass
52fc11eb57 Open files from list function added
Will open files from array of paths
2013-06-29 17:46:25 +01:00
Matt Pass
72ab42e7bf Determin fold type by { char existence
If we have a brace char on the line in question, we want to fold on
braces not tags
On change, if we have typed or just removed a } char, scan upwards to
find the previous { char
Then perform a refresh on all the lines in that range and redo the fold
type
2013-06-29 17:29:32 +01:00
Matt Pass
5b32c96f1d Determin fold type by { char existence
Don't assume if it's a certain file type it will be folding on braces,
instead fold on braces if there's a brace char on that line
2013-06-29 17:25:50 +01:00
Matt Pass
846204c244 More specific condition here
Would fail thru bad falsey checking
2013-06-29 15:45:45 +01:00
Matt Pass
c0e62ad8e8 Remove line class based on CM not tab no 2013-06-29 15:45:13 +01:00
Matt Pass
31bbbe098a Remove line class on CM instance not selected tab
We were trying to remove a line class based on tab number and not CM
instance, this ended up causing an error after 2nd open. Because of the
error, CM instance numbers were not being set correctly, so we ended up
with the same number and so when switching tabs it would show the same
editor instance.
2013-06-29 15:00:37 +01:00
Matt Pass
0fb89ceb06 Trailing space adding added
Load extra JS file, setup class and turn option on
2013-06-29 13:14:46 +01:00
Matt Pass
0f904e66d4 Upgrade to CodeMirror 3.14 & trailingspace.js
Extra lib added to display trailing spaces
2013-06-29 13:14:06 +01:00
Matt Pass
74739343d4 Cap fix only 2013-06-29 13:10:53 +01:00
Matt Pass
d4f1b9988b Descriptions added to all plugins & picker 2013-06-28 23:14:01 +01:00
Matt Pass
cd38113da2 Fix to save path containing filenames
Detect a . in the filePath and if we find one, save at root instead
(Stops us saving at a path that's actually a file, eg |TEST|file.txt)
2013-06-28 22:56:13 +01:00
mattpass
c95772122f Set token to session var 2013-06-23 14:19:56 +02:00
Matt Pass
3196275bb1 Don't allow new file or folder if greyed out
It's greyed out for a reason
2013-06-21 22:23:48 +01:00
Matt Pass
483ee12ccd Show message when we can't save in demo mode
Alert user that we can't commit setting changes in demo mode
2013-06-21 22:00:27 +01:00
Matt Pass
ba14dfdc46 Taller help screen to accomodate new shortcuts 2013-06-21 21:49:50 +01:00
Matt Pass
b7a2e7d097 Scroll mousewheel to cycle thru next/prev tabs 2013-06-21 21:49:30 +01:00
Matt Pass
6ff8dcffc1 Clicking middle mouse on tab closes it
Show shortcut on help screen too
2013-06-21 21:31:55 +01:00
Matt Pass
bc8903d3c8 If we haven't specified, close the current tab 2013-06-21 21:27:11 +01:00
Matt Pass
6e43e7a336 H1-H6 now
H7 removed as a shortcut
2013-06-21 20:58:08 +01:00
Matt Pass
df81050c2a H7 removed, H1-H6 now only
H7 removed as not officially part of the W3C spec
2013-06-21 20:57:17 +01:00
Matt Pass
ebfafc66cb Show light or dark text on picker previews
Declare all vars at the top of function
If the R, G or B values have less than 50% saturation or we have a high
yellow like color, use a white text color, otherwise black
Set that on both the X&Y preview and the clicked color preview
2013-06-21 20:53:00 +01:00
Matt Pass
bccf5d0f48 Icon readded
Removed by mistake
2013-06-21 20:30:32 +01:00
Matt Pass
761a9f4505 ICErepo v0.8 2013-06-21 20:17:18 +01:00
Matt Pass
5f29c44a9e Removed license
The main JS file contains reference to a GNU license URL which
supercedes this one
I therefore feel I can remove this 17k file for bytesaving reasons and
it still contains a link to an updated license
2013-06-17 14:50:07 +01:00
Matt Pass
c5b22427f3 Error catching and minor tweaks
No need for error reporting here, set by settings.php
Set empty $passwd array and then set that array value if we have a login
attempt, to avoid error
Removing unneeded syntax and whitespace
Check isset on request command to avoid error
2013-06-15 14:25:41 +01:00
Matt Pass
d3737f5a62 User settings carry version no & clear on upgrade
versionNo also added to user settings array
Check this against system and on mismatch, rename .old and reload to
create new settings file
2013-06-15 13:40:56 +01:00
Matt Pass
7bef57ca76 Hide errors, @session_start and if wrap function
Don't display errors, just silently log them
Don't produce warnings if we can't session_start due to headers already
being sent
Test if the mb_detect_encoding function exists before using
2013-06-11 08:37:27 +01:00
Matt Pass
ebff4cd1c0 Complete rewrite and now covers 12 tests
I've decided not to cover every item in the API as this would be a bug
undertaking and it's not necessary to test every part.
So I have covered the main functions here and areas where items may go
wrong, such as opening, updating (testing CM), saving, manipulating
content, altering the structure, tab switching and getting remote
content
By having only the important items to test, we also keep the test speed
runtime as short as possible.
2013-06-10 09:55:46 +01:00
Matt Pass
b0dc96c888 Edge case changing on item existance
Only look to update hints if we have at least 1 open file
We can also only determine the type of fileName for code folding if we
have a filename
The same is true for the previewWindow, can only look to do this if we
have a file open
These are all edge cases highlighted through unit testing
2013-06-10 09:53:07 +01:00
Matt Pass
13e1b933e1 Only action on fileName and dontAsk param
We can only set the CaretLocType if we have a fileName to inspect, an
edge case brought up by unit testing
Extra param added to closeTab to allow us to not ask the user for close
permission on unsaved files
2013-06-10 09:49:54 +01:00
Matt Pass
b25cab1fe6 No provided test file, so no perms needed there 2013-06-10 09:45:48 +01:00
Matt Pass
01ebefcb74 Test file removed
Now created on the fly by ICEcoder
2013-06-10 09:44:42 +01:00
Matt Pass
e536b0d5e2 Help & Settings icons added, new tab star gone 2013-06-07 23:39:42 +01:00
Matt Pass
2147f1f129 Adjustments to work with new icons
Added helpIcon and settingsIcon classes
newTab has slightly different padding now we have a + symbol instead of
a star image
2013-06-07 23:38:51 +01:00
Matt Pass
e684a1e91b Extra icons, tooltips and new tab is now a +
Help and Settings icons added
ICE symbol now clickable to website
All these icons now have alt and title tags
New tab symbol is now a + instead of a star
The form containing codeAssist and goLine now has an action of # to stop
submitting to self on some browsers
2013-06-07 23:37:58 +01:00
Matt Pass
6f95aeac8f Condensing and tweaking code
0px becomes 0
Classes added for demoArrow, h2 and heading to save repeating styles
No need to set $class for 1 use, define inline and also shift left more
to line up better
Condense closing and opening PHP tags by not doing this
Add ternary condition instead of if else
Only trigger cssColorPreview if CSS is our caretLocType
Condense working out fileExt down to 1 line
2013-06-07 23:33:48 +01:00
Matt Pass
f071f84eb4 Version 3.0 beta 2013-06-07 12:46:37 +01:00
Matt Pass
8db478d8f0 New color settings added, BG image removed
tabBGopen now a lighter color, plus tabFGcurrent and tabFGopenFile
colors added
Removed bgVPos and no longer setting BG position as we're not using an
image anymore
(Instead we set either the current or open tabBG color
We also set the FG color of the filename to current or openFile
2013-06-05 18:11:54 +01:00
Matt Pass
ce481b0f25 3px radius on filenames, slight adjusts to margin
Plus padding added to filenames
2013-06-05 18:07:21 +01:00
Matt Pass
6af16d7fca No longer using tab BG image, add background #aaa 2013-06-05 17:59:13 +01:00
Matt Pass
850cc3b2bd Remove tab BG image
We are now setting with CSS background
2013-06-05 17:57:02 +01:00
Matt Pass
a1363ef41b Remove old template file
Is now config___users-template.php and this is no longer used
(duplicate)
2013-06-05 17:56:29 +01:00
Matt Pass
71f82251f6 Remove progress bar and fade on hiding file menu
Progress bar removed as it's not accurate or indicative of amount
loaded/progress
Call hideFileMenu instead of manually setting display, so now we have
fade effect
Add opacity transition of 0.15s
2013-06-05 17:11:03 +01:00
Matt Pass
eaf39661ba Fade menu in/out plus get rid of progress bar
No longer manually set display to none on fileMenu on actions, should be
calling hideFileMenu
On showing the menu, set the opacity to 1 4ms after setting the display
to inline-block
Simply set opacity to 0 on hiding so it's more an instant hide
Get rid of progress bar reset
2013-06-05 17:08:21 +01:00
Matt Pass
2b991d9958 Features moved to website
No need to be part of the ICEcoder repo, plus saves 2k
2013-06-05 17:04:07 +01:00
Matt Pass
eed8b29753 ICEcoder logo update and docRoot setting added
New ICEcoder logo added plus docRoot available as a setting in
config___settings.php
2013-06-05 16:14:36 +01:00
Matt Pass
ebc8e3a27b Error catching on range select
Will only now begin to select a range of files if we have selected files
already.
If not, it will add this first file as a start point.
Will also only range select if we are range selecting in the same
folder, otherwise will add this file. This enables you to select ranges
of files in different folders.
Lastly, the root has a very slightly different node structure, as we
can't start at 0 and step in increments of 2, it needs to be 1, 3, 5
etc. So as a failsafe, if the node we're looking at is not a LI,
increase the i counter by 1.
2013-06-04 18:47:06 +01:00
Matt Pass
aa2ed93d74 Load system and user settings files
$configSettings is a seperate file now, containing the array of settings
we have buried in this file
Renamed user template, so change of filename here
Also using $configUsersTemplate to be clearer about things
2013-06-04 18:03:32 +01:00
Matt Pass
ba520e6aa1 Added config settings file
These were buried in the settings.php file, now pulled out of the file
and put into their own array
This is so they can be found easier
2013-06-04 18:01:44 +01:00
Matt Pass
61373e87ea Rename, was config___template.php & array rename
As we now have 2 files beginning config___, be more specific about what
this relates to
Also renamed the array to $ICEcoderUserSettings
2013-06-04 18:00:49 +01:00
Matt Pass
4dd95b1b0f Ignore config-*
Be less specific about the files we do want to include
config-*.php for files to ignore and those we want to keep will begin
config___
2013-06-04 17:59:00 +01:00
Matt Pass
f160b4fa80 Range select added, shuffle of layout and Ctrl
Range select (Shift + click) added as a shortcut
File manager shortcuts moved under document shortcuts
All instances of CTRL now Ctrl
2013-06-04 17:39:03 +01:00
Matt Pass
de637f1048 Ctrl + s and +o noted on Save and Open icons 2013-06-04 17:37:57 +01:00
Matt Pass
f628868a8e Logo updated to show a capital ICE
The letters stand for Inspire, Create, Evolve. Should capitalise the I.
2013-06-04 17:31:40 +01:00
Matt Pass
9dd2221841 All variations of password now just password
To make things simpler, everything is now just called password rather
than accountPassword etc
settings.php also now gone back to checking for the existance of the
$_POST password rather than looking for a submit button named 'set
password'. This obviously wouldn't work as that's not the name of the
button on the settings screen, it's 'update'
2013-06-04 17:25:46 +01:00
Matt Pass
24d68efd4b Get 1st array value seperately
Some older versions of PHP don't seem to like calling [0] on the same
line as explode
Now getting value on seperate line of code
2013-06-04 14:14:49 +01:00
Matt Pass
ad8c3da48b Shift click now available to select file ranges
New vars added for the new event of shift-clicking to select ranges of
files in the file manager
Get the last file clicked and work out if the file we've just clicked is
alphabetically greater than it or not, so we end up with a startFile <
endFile and are therefore selecting from startFile downwards
In a for loop, run until we find our startFile and begin selecting.
If we're selecting and the file we're looking at isn't in our
selectedFiles array, select that file and add it to the array
Finally, when we reach our endFile, break out of the loop
2013-05-31 23:37:35 +01:00
Matt Pass
7255ea4805 Consider extensions up to a space char
This enables ICEcoder to understand that image.jpg (2) is a jpeg and can
be opened as an image
2013-05-31 21:16:18 +01:00
Matt Pass
47cf80102c Run processes on events
On logout event, include that process
Settings template file is now config___template.php
Create new if statement for login success and fail, plus run processes
for each event
On new user setup, run that process
If multiUser, always show the checkUpdates box as we don't know if we're
setting up a new user or logging in, so have to assume it's a new user
and allow this setting to show
2013-05-31 20:25:44 +01:00
Matt Pass
2cebe069f2 onLoad, run processes/on-load.php
open this in the new iFrame, processControl
2013-05-31 20:19:11 +01:00
Matt Pass
3326ba5784 New iframe added for processControl
Processes will be loaded into this. For now it's only used by
processes/on-load.php.
As more processes are added this will be used by them.
2013-05-31 20:18:22 +01:00
Matt Pass
5e5fa22566 Renamed template to config___template.php 2013-05-31 20:17:10 +01:00
Matt Pass
95dbad842d Processes added
Files added to put custom processes into, including events for:
load, login fail, login, logout and new user
2013-05-31 20:14:54 +01:00
Matt Pass
5576c9e2e9 If we have no fileLoc, show /
This covers saving new files/save as in the root
2013-05-31 14:35:08 +01:00
Matt Pass
3577fc613e Update file to match main JS 2013-05-31 14:34:26 +01:00
Matt Pass
7bdeefd7e1 Only do layout things if ready, fix to path
Can only resize the file manager if ICEcoder is ready
Need a selectedFiles[0] in order to prefix to filePath
If we add a new file to the root, we end up with a ||[NEW], so replace
|| with | to fix this
Can only set tab widths if ICEcoder is ready
2013-05-31 14:32:02 +01:00
Matt Pass
df2697c68b [none] moved left & up
To match style of other data items on display
2013-05-31 12:36:51 +01:00
Matt Pass
d859075e97 multiUser is false by default 2013-05-31 10:39:08 +01:00
Matt Pass
d6c282a70a Multi user setup & login added
Session accountUsername is now just username
Settings filename now may contain the username if available from a post
or session var
setPWorLogin is now login by default, set password if we create a new
config file
Instead of the posted accountPassword value, we now look to the value of
the submit button and if it contains 'set password' or not
Set session username to the posted value on login or set password and
set to itself on every load
accountPassword form field now just password
Focus on the username or password field, depending on the 1st one shown
on page
Set the value of the submit button to 'set password / login' if
multiUser
2013-05-31 10:36:39 +01:00
Matt Pass
f541fae982 Get function added for byte saving and clarity
New global function added called 'get'
This is because top.document.getElementById is used so often, we
actually save 2kb by having a function to return the object, plus it's
much more readable to have:
get('serverMessage').style.opacity = '1';
rather than
document.getElementById('#serverMessage').style.opacity = '1';
2013-05-30 18:11:04 +01:00
Matt Pass
054cc5cad9 newTab behind others and fix move glitch
newTab now has a z-index of 0 so that it slides behind other tabs when
new tabs are opened
serverMessage is now display: inline-block and hiding and showing is
done on moving the left position to 0 or 2000px to show or hide (doing
the show/hide on changing the display type was causing reflow issues
which seemed to mean occassionally the newTab wasn't moving to the
correct position)
2013-05-30 08:41:39 +01:00
Matt Pass
b52f0cd112 Version 2.5 screenshot 2013-05-29 15:08:51 +01:00
Matt Pass
4865f6c87b Version 2.5 2013-05-29 14:49:47 +01:00
Matt Pass
b2ceca3a8f Range fix & check fold type by file extension
Revert back to the 'from' > 'from' range as we may not always have a
'from' > 'to' object here
Determine fold type by filename extension, also includes CSS and LESS
2013-05-29 14:49:39 +01:00
Matt Pass
2c4ee9370c Escape quotes and full release > beta
Escape quotes in message so we can have quoted URLs in links etc
If our version is beta, the current not and we have matching numbers,
take 0.1 off our version number so it's seen as a lesser version
2013-05-29 13:57:43 +01:00
Matt Pass
1f10cad45b Clearer to use from - to
Was actually OK going from -> from line, but makes more sense to go from
-> to.
2013-05-29 12:42:32 +01:00
Matt Pass
c2e92fa355 Brace folding on applicable filetypes
On both load and change we need to use braceRangeFinder or
tagRangeFinder depending on filetype
Also get rid of old, commented foldStyle marker CSS historical reference
as we're now using that
2013-05-29 08:57:37 +01:00
Matt Pass
2f85371738 Need to global context to be usable 2013-05-29 08:54:45 +01:00
Matt Pass
a48c9f5a77 Set gutter to be min-width not width
This is so the gutter width expands for bigger line numbers, was
overlapping due to fixed width
2013-05-29 08:25:39 +01:00
Matt Pass
61728cfa07 Seperate fold gutter, CSS tweaks & for count fix
Seperate gutter & class added for folds
Change to class names - now fold, foldOn and foldOff
Tweaks to coloring on fold markers
For loop needs to redo fold markers for both the start line and for the
length of the text. This means we now get fold markers when pasting
lines of text
2013-05-29 08:24:46 +01:00
Matt Pass
1643e74758 CSS class name changes
fold is now the classname for the guttermarkers, foldOn for the on
variant, foldOff for off
We have a seperate gutter now for folds, called folds and no longer
dropping markers into the linenumbers gutter
2013-05-29 08:16:33 +01:00
Matt Pass
33a354688a Begin setting up multiUser
For now tho this is hidden from view until the rest is set up
2013-05-28 19:07:51 +01:00
Matt Pass
7c2d6f6fb5 Organise alpha tabs on openFiles.length
Don't run this process based on cMInstances.length but openFiles.length
which represents the tabs open
2013-05-28 18:41:16 +01:00
Matt Pass
ea959248ca onChange redo markers
Redo the markers for the changed range
2013-05-28 08:39:08 +01:00
Matt Pass
2665a3be40 initMarks is now dontCollapse, clear non folds
initMarks was used for the intial setup of a doc with (-) marks but this
idea can be extended to cover not wanting to collapse and only mark
lines
If a line isn't collapsable now it clears the markers for it (used when
we delete text, replace with something else etc)
2013-05-28 08:38:33 +01:00
Matt Pass
d240cf0a53 Compressed file no longer contains foldcode.js
This is because we have a modified foldcode.js file now in ICEcoders own
lib folder
2013-05-25 18:36:30 +01:00
Matt Pass
c02e7cd0b5 foldcode.js loaded and guttermarks set
A modified version of foldcode.js is now loaded to show guttermarks
New classes added for foldmarker, guttermarker plus the on and off BG
colors
Remove temp measure of showing a guttermarker then 1 second later
removing
Instead now pass new params to the new codefold system to show
guttermarks
2013-05-25 18:30:54 +01:00
Matt Pass
6a3e15aabf On load also set the gutter marks
Using tagRangeFinder for now, need to also handle braceRangeFinder and
put into a function within ICEcoder
2013-05-25 18:26:24 +01:00
Matt Pass
e4bae8cdc5 Now shows guttermarks
Takes new params for markOn, markOff and initMarks
Creates new span DOM elems for markOn and markOff
Determin if a line is foldable by there being a range with chars in
between (ie, start & end line's & ch's not the same)
If it's foldable and we're clearing or setting up the initMarks, show
markOff marker, otherwise markOn marker (as cloned nodes)
Also set to the markOff marker when clicking the inline widget
2013-05-25 18:24:47 +01:00
Matt Pass
e0e679d436 foldcode.js added
Original foldcode.js from CodeMirror addon lib added
This is because I want to make changes to this to show guttermarks too
Added as a start point, so we can see changes in a diff view
2013-05-25 18:18:55 +01:00
Matt Pass
0f3050521d Titles added to Preview Window and Terminal 2013-05-24 09:18:38 +01:00
Matt Pass
db5a10bb96 Update file to match main JS 2013-05-24 09:12:50 +01:00
Matt Pass
b05954eccd Error catching when no tabs are open
Look to openFiles.length on if statements within openPreviewWindow,
closeAllTabs and alphaTabs functions so we only do these processes if we
have 1 or more tabs open
2013-05-24 09:10:37 +01:00
Matt Pass
d2504dac64 New classes for colorValue and insertColorValue
To stop using inline styles on the preview/value boxes and insert
buttons
2013-05-23 17:50:15 +01:00
Matt Pass
a95e4124a8 RGB background, color and value set
Same BG and color as hex elem, but value is set the hex BG value with
whitespace removed
2013-05-23 17:49:31 +01:00
Matt Pass
c18630b0a5 RGB color value added to picker
Farbtastic color picker now setting RGB value and BG color in colorRGB
elem
insertColorValue function adjusted to receive any value and replace
2013-05-23 17:46:44 +01:00
Matt Pass
f436aa835d Set a stream context timeout for file reading
Add a context array to all instances of file_get_contents(). This is so
we don't end up with a timeout too early if the system is set to
something short (ie, 15 secs) and we try to open a large file that takes
longer than this short limit.
2013-05-23 17:45:00 +01:00
Matt Pass
7409c89a87 Updated file to reflect main JS file 2013-05-23 10:08:45 +01:00
Matt Pass
0de8405906 Remove old highlight & save dialog now filename
If we have a new filename and our file is not [NEW], we must be
peforming a Save As.
In this case, establish the old filename and if it's visible, change its
BG & FG colors to the default
Also now set previousFiles when any save happens to avoid previousFiles
still having old filenames
The dialog now wants only a filename in both Save As and New File cases
Condensed code a little here
2013-05-23 10:08:11 +01:00
Matt Pass
39d4bfe858 If our file is |[NEW], prefix selectedFiles[0]
This is so we can pick up where we are saving the new file.
2013-05-23 09:56:56 +01:00
Matt Pass
0677cb2a90 Line height added to previously opened files list
Icons and text previously looked out of line
2013-05-23 09:55:09 +01:00
Matt Pass
2dd2e64f43 Ignoring config*.php except config-template.php
To avoid any of the config files ending up in your Git repo
2013-05-23 09:54:30 +01:00
Matt Pass
3d45172991 Config now includes server name
Config filename now also includes server name (domain and subdomains).
This means you can end up with different config files depending on where
ICEcoder is being used, such as config-localhost.php,
config-mydomain_com.php, config-dev_mydomain_com.php etc.
Also now using CodeMirror 3.13
2013-05-23 09:53:24 +01:00
Matt Pass
979fb791ac Upgrade to CodeMirror v3.13
From v3.12
2013-05-23 09:43:17 +01:00
Matt Pass
1fcc2d996c Detect encoding and use that in if statement
Try to detect encoding type and check on it not being ASCII in if
statement too
2013-05-22 17:21:17 +01:00
Matt Pass
e1d1891de8 Don't set innerHTML to false
Mistakenly setting the innerHTML to false, so went back to classic
if/else if statements to only set on these 2 cases
2013-05-22 17:19:20 +01:00
Matt Pass
fabfcbd742 Test against converted UTF8 no BOM content
Convert content to UTF8 with no BOM before testing matches against it
2013-05-22 13:00:19 +01:00
Matt Pass
3710fa9e79 Convert content to UTF8 no BOM
Detect bad chars and BOMs in loaded content and convert plus show
message to inform user
Affects: Loaded files, remote loaded files, replacing text in files,
saving files
2013-05-22 12:58:33 +01:00
Matt Pass
b059261065 Function to convert strings to UTF with no BOM
Remove BOM, test broken and converted string lengths, encode if needed
and also show a message if required.
2013-05-22 12:55:27 +01:00
Matt Pass
7b1b91ca14 lineEnding setting added
Now replacing \r\n, \r and \n with whatever we chose to be the
lineEnding setting
lineEnding is \n by default
2013-05-22 08:40:38 +01:00
Matt Pass
098127c287 New min file to reflect changes 2013-05-21 17:05:21 +01:00
Matt Pass
83c99f34a3 Lowercase hex used
Use lowercase hex values to be consistent with rest of ICEcoder
2013-05-21 17:05:04 +01:00
Matt Pass
a9ae141838 Selected tab color is now very dark grey
This is to go with new color scheme, where black is current and is same
color as findBar to better indicate which tab you're on. Looks more
refined too!
2013-05-21 16:57:08 +01:00
Matt Pass
c783416054 Use tabFGselected instead of hardcoded value 2013-05-21 16:55:51 +01:00
Matt Pass
59e1bc3c56 New settings to style highlights
Formatted settings to make them easier to read
Added new settings tabBGselected to tabFGnormalTab. This is so you can
change styling of ICEcoder itself a bit easier, as these colors are used
in a few places
Extra ternary conditions added to handle things better.
Black is now current, selected is blue, open is grey and normal is
transparent. Also set the FG text colour on these things too, to go with
new color scheme.
2013-05-21 16:55:09 +01:00
Matt Pass
f4cdff0c2c Show icons for last 10 files
Load in seperate CSS file file-types.css
Show the last 10 files in a UL, with icons next to LI's as per file
manager tree
2013-05-21 16:46:23 +01:00
Matt Pass
5bd99480f1 Redo highlights on opening branch
When we open a new branch, redo the tab highlights which also redoes the
file manager highlights
2013-05-21 16:44:21 +01:00
Matt Pass
a86e7e4182 Using file-types.css too 2013-05-21 16:42:33 +01:00
Matt Pass
c3477264b3 file-types.css added
Everything related to the file tree display, icons etc moved to it's own
file
This is so we can use this CSS file too, without having an additional
CSS reset and body applied
Main reason for doing this is so we can show icons from editor.php
2013-05-21 16:42:16 +01:00
Matt Pass
9c4c33aa76 Increase the variations on definition matching
Covers a few more variations here, will one day integrate Tern to better
handle this.
2013-05-16 16:57:05 +01:00
Matt Pass
9b5aea5aec Shortcut for mobile open file added 2013-05-16 08:43:37 +01:00
Matt Pass
614ee50262 Open file on clicking on a mobile 2013-05-16 08:31:18 +01:00
Matt Pass
f1b7c973d3 Update min file to match main JS 2013-05-14 18:41:06 +01:00
Matt Pass
0c7fad798c updateByte Display and showDisplay functions
byteDisplay added as DOM elem ref
updateByteDisplay added which sets the inner HTML to be the length of
the content spilt by commas on thousands
showDisplay function added to toggle between the 2 displays
Call updateByteDisplay on switching tabs
2013-05-14 18:40:41 +01:00
Matt Pass
e4ed3cf978 Call updateByteDisplay on events
To match updates on updateCharDisplay
2013-05-14 18:38:45 +01:00
Matt Pass
63687b7f48 Byte Display container added
Get rid of span inside of charDisplay, not used at all
Add byteDisplay much like charDisplay, both have a display set and
onClick call the new showDisplay toggle function passing the others name
as a param
CSS made simpler by aligning right with a margin plus cursor now pointer
2013-05-14 18:38:08 +01:00
Matt Pass
20454a21ed devMode setting displayed
Test suite now floated left with 50px right margin
If devMode is true, float another DIV to the left of this stating that
demo mode is on and we are using ice-coder.js
Maybe don't need the DIV to clear the float, but worthwhile having
incase of browser layout issues
2013-05-14 08:56:51 +01:00
Matt Pass
eb30cb0cb6 Version 2.4 screenshot 2013-05-13 09:12:51 +01:00
Matt Pass
b211fae85c Version 2.4 2013-05-13 08:58:21 +01:00
Matt Pass
93b4774903 Take ICEcoder back out of devMode 2013-05-13 08:57:57 +01:00
Matt Pass
236b55fce6 Updated min file to match dev JS file 2013-05-13 08:57:44 +01:00
Matt Pass
c34bf50c39 Info & version in msg, form near upload option
Show update version info after version no in message
Move form next to upload option it relates to for clarity
2013-05-13 08:55:31 +01:00
Matt Pass
b8f921dab2 CTRL+o can now get remote URL
You can enter an absolute URL path (ie, anything that has :// in it) and
it will trigger a different function to get the remote URL by sending
that action to the server queue
2013-05-12 17:13:44 +01:00
Matt Pass
fc79be3010 getRemote file function added
Firstly, avoid establishing a full path if we have a getRemoteFile
action as it will be a URL
If we want to get a remote URL, attempt to get remote contents,
standardise all line endings to be Linux based, create a new tab, new
textarea and finally set the value of the new tab. If we don't manage to
get the file, show an error message
2013-05-12 17:12:14 +01:00
Matt Pass
63d08eeed2 Clarify write perms to be either 757 or 775
Depends on system
2013-05-12 17:09:22 +01:00
Matt Pass
7fa39f645d Space shortcut to refocus on document
Hit space when outside of document to refocus on it
2013-05-12 16:06:55 +01:00
Matt Pass
535677fc8e onclick needs if check and simpler title updating
onclick function needed is statement plus passing of event on anon
function to solve repeated CTRL+click issue
Update title not by adjusting hardcoded values but by looking to ID of
targetElem
We're able to get rid of a lot of code here as the onmouseover function
is now looking to a child node item in get-branch.php, so no need to
mess with updating hardcoded string values.
2013-05-12 13:56:30 +01:00
Matt Pass
2dfff50031 Set 2nd param to this.childNodes[1].id
Rather than a hardcoded string which we need to update later, make it
relate to the inner node items ID
2013-05-12 13:53:28 +01:00
Matt Pass
c335b6b7fb Check htmlState also plus put into dev mode
Extra CodeMirror object child level needs to be checked too plus put
into dev mode until I resolve 2nd eval issue on renaming file (occurs in
.min.js file)
2013-05-10 18:50:14 +01:00
Matt Pass
a81c4c7a75 Also need write perms on test-file1.txt
A temp measure till I do something better here
2013-05-10 17:50:48 +01:00
Matt Pass
e2ada5e6b2 Setup point changed to include perms on test dir 2013-05-10 17:46:27 +01:00
Matt Pass
43ae4ac317 Dropping eval for function closure and slashes
Stop using eval here in favor of a function that returns the value, also
replacing pipes with slashes to display correctly on mouse hover
2013-05-10 17:45:11 +01:00
Matt Pass
5f0ee6d95e Trim + and space from end of file
Not something that should/could be used consistently across enviro's so
am trimming these chars off
2013-05-10 17:41:37 +01:00
Matt Pass
0947172391 Copying of multiple items
Celecting copy will now store an array of the selected items and when
pasting, add each to the server queue for pasting.
2013-05-09 09:10:16 +01:00
Matt Pass
0fb9680f72 devMode setting added, swapped menu item order
New setting for devMode. If true it will use the unminified ice-coder.js
file, otherwise the min.js version
Copy option now available for multple file copying, outside of single
menu items. Paste option moved next to it.
2013-05-09 09:06:23 +01:00
Matt Pass
ba94a3bba0 Add system as a DOM elem
Not used as yet but available as a hook
2013-05-08 08:59:13 +01:00
Matt Pass
11963e263d No need to have font weight, size or color
No text inside this anymore
2013-05-08 08:58:47 +01:00
Matt Pass
3f15cb8fff Python now supported as a language
Also minor fixes to Ruby's usage
2013-05-08 08:51:50 +01:00
Matt Pass
eca4f8e06d Version 2.3 2013-05-06 17:59:51 +01:00
Matt Pass
358be2ee92 Updated to v2.3 & changed text to Linux Terminal 2013-05-06 17:59:44 +01:00
Matt Pass
acd8f949e7 Updated file 2013-05-06 17:42:58 +01:00
Matt Pass
a1574af5e0 Working with previewWindow, plus new sys tools
stickyTab now previewWindow in all places
nestDisplay text now gone, was just clutter
nestValid and nestDisplay now move to be under editor when resizing file
manager
Now setting nesting OK/broken on title on new look nesting indicator
new functions for openPreviewWindow and openTerminal, tidied up code a
little
stickyTabMaybe now removed as a flag
2013-05-06 17:40:02 +01:00
Matt Pass
525e73e179 stickyTab now previewWindow 2013-05-06 17:33:42 +01:00
Matt Pass
abe1745642 Terminal plugin removed
Now part of the ICEcoder system
2013-05-06 17:33:21 +01:00
Matt Pass
eda925e617 Icons for preview window and terminal added 2013-05-06 17:33:04 +01:00
Matt Pass
5ab3f7ba16 All stickyTab refs now previewWindow 2013-05-06 17:32:45 +01:00
Matt Pass
cb12bdad2d Removed sticky tab shortcut, added live edits 2013-05-06 17:32:11 +01:00
Matt Pass
2a6c2fc273 Jump to definition shortcut added
Shortcut re stickyTab now gone as we click icon to open preview window
now
2013-05-06 17:31:48 +01:00
Matt Pass
216c04b3f1 Terminal moved to system & icon gone
Terminal is now no longer a plugin but part of the ICEcoder system. In
doing this, the icon was removed, plus the path to the settings.php file
altered
2013-05-06 17:29:12 +01:00
Matt Pass
0ecb6ea1aa system, preview, terminal & nest display changes
New class added for new system tools area below file manager, contains 2
child divs to display preview window and terminal icons
nesting class is now a small circle, placed near nestDisplay which
contains the breadcrumbs
nestDisplay class is moved along by 12px to accomodate the new smaller
nesting OK/broken indicator
2013-05-06 17:25:59 +01:00
Matt Pass
f3fff8543d Icons for preview and terminal, add demoMode var
demoMode var now available to make use of in JS
New system DIV in footer along with 2 child divs which trigger new
functions to open the preview window or terminal
Get rid of nest display text, it's just clutter
2013-05-06 17:22:36 +01:00
Matt Pass
2d75b57195 Using minified JS file
40% byte saving so loads that bit faster.
2013-05-06 16:00:01 +01:00
Matt Pass
7ebd73916e Added a minified version of ice-coder.js
This saves about 40% of the load time on this file now.
2013-05-06 16:00:00 +01:00
Matt Pass
cafa9d521a Making JS Google Compiler compatible
Needed to alter a few things to make it Compiler compatible. These
include stop using </textarea> even if it's in a comment, escape it when
using it as a string, comment tag openings need to be escaped too, plus
we cannot use char as a var, so renamed many references to ch instead.
Finally, needed to escape the &#39; apos ref to avoid issues there.
2013-05-06 15:59:59 +01:00
mattpass
a5b395d888 3rd param should be false
The 3rd param is to define buttonClick, which isn't true in this case.
2013-05-05 19:52:25 +02:00
Matt Pass
c214640bb1 Jump to Definition variations setup
If something is selected and we have an orig cursor pos, set it back to
that. If not, we set the orig cursor pos, define an array of possible
definition matches and attempt to find them one after another in a for
loop, escaping when we do. Altered findReplace function to provide a
return of true or false depending on if anything is found.
2013-05-05 13:35:38 +01:00
Matt Pass
d7a8b35ded Jump to Definition, opening up findReplace func
New function jumptToDefinition. This takes token at the current cursor
position and then looks for that function definition as a set piece of
text 'function '+tokenString. This is triggered from CTRL+J so you can
hit this whenever you're on a function call and it will jump to it's
declaration.
In doing this I have repurposed the 1st param in findReplace function to
now accept a string to find. Previously we had this set to action, but
this variable was never used, must have just been a placeholder. In the
couple of places we call this function now we are passing the find input
box value.
2013-05-04 15:19:31 +01:00
Matt Pass
bcc86e160f Pass find value to function as 1st param
Instead of passing thru a string that never gets used (the 1st param
here is put under the action variable, but then never used), now the 1st
param is the string to consider as the find. In these cases, it's
obviously whatever is in the find input box.
2013-05-04 15:14:38 +01:00
Matt Pass
5b14389c6e Only hide mask if not over popup elems
Determined by a overPopup flag
2013-05-04 13:52:28 +01:00
Matt Pass
0ba4803154 Canvas elem plus 4 x input boxes added
Canvas element added to drop a dup of our image into
4 input boxes also added to show current mouse XY hex & RGB values and
similar values when clicking the canvas image.
New flags added to stop closing the popup unless we click outside of
these elems
Finally, split everything onto multiple lines for readability
2013-05-04 13:51:51 +01:00
Matt Pass
e58f9cae28 overPopup flag, canvas display & hex/RGB convert
New flag to determin if we are over a popup or not, won't hide popup on
click if we are
drawCanvasImage function added, takes img node, creates a new canvas and
on load of a JS img object, puts the same image into the canvas, scaled
to same size. This then has 2 functions applied to update RGB and Hex
values and BG colors as the mouse moves and also on click sets another
set
rgbToHex and toHex functions added to help return hex values on demand
2013-05-04 13:48:33 +01:00
Matt Pass
1d5c049c01 Don't reload MD files
Stick with the Markdown parsed version shown via editing.
2013-05-02 17:19:04 +01:00
Matt Pass
0d01b4a2ea Only update current doc & CSS append once
Now only updates the innerHTML value of the stickyTab doc if the browser
location is the same as the doc we're editing (HTML & MD files). Also
now adding an ID to the style and if it exists, remove that child DOM
elem before adding another so we only ever have 1 child for this, ie, it
gets updated by removing & adding.
2013-05-02 17:18:15 +01:00
Matt Pass
d43a758a37 Markdown mode added, fix to tag display
Markdown added as a mode
CodeMirror changed their object structure to include another child -
htmlState
If it's a markdown file we're editing, after loading our file into the
stickyTab, onload of this parse our content through mmd to this window
2013-04-30 17:54:19 +01:00
Matt Pass
d886372f11 Load mmd.js lib for markdown parsing to stickyTab 2013-04-30 17:51:51 +01:00
Matt Pass
838d44bd5c Load and use Markdown parser
If the file we are editing is a markdown file and we have a stickyTab
open, send the parsed editor content to the document DOM for display
2013-04-30 17:51:26 +01:00
Matt Pass
8f997eb4f3 Markdown parser added 2013-04-30 17:48:54 +01:00
Matt Pass
65b3fc56ef Markdown icon added, others shift along 2013-04-30 17:48:16 +01:00
Matt Pass
6e061cbc30 Markdown (md) files can now be opened in editor 2013-04-30 17:47:58 +01:00
Matt Pass
9e44b76214 Markdown icon added 2013-04-30 17:47:28 +01:00
Matt Pass
d1e928e068 Note on Markdown mode being included 2013-04-30 17:47:19 +01:00
Matt Pass
2c2249d96b Markdown mode included 2013-04-30 17:46:55 +01:00
Matt Pass
d87e932030 Live editing of CSS files
Tries to find CSS files in the stickyTab shown window. If it does it
appends a new stylesheet to it as you type.
2013-04-30 08:07:03 +01:00
Matt Pass
44cac8a7e1 Live editing of HTML files
Now when you have a stickyTab open and edit HTML files, it shows the
live edits as you type
2013-04-29 08:32:49 +01:00
Matt Pass
736d3c8744 If ctrlKey, don't openCloseDir
We are selecting files/folders if the control key is down, so no need to
open or close dirs
2013-04-21 15:48:04 +01:00
Matt Pass
3104065437 Dimensions now shown under image
The natural image dimensions are now shown next to the image name (now
in bold) along with a note that it's displayed at a reduced size, if it
is.
2013-04-21 15:47:15 +01:00
Matt Pass
444695a908 CTRL, Alt & Shift keys now established natively
Instead of having toggle variables for CTRL, Alt and Shift we are now
establishing if these keys are up/down from the event object passed in.

This means we don't need these flags, it's less code, and more reliable
too as we query if these keys are down from the event hooks.

delKeyDown is also removed though was never really used.
2013-04-21 15:42:55 +01:00
Matt Pass
eba6f4eaf2 Pass event to showMenu on context menu
This is used as a hook to establish if CTRL, shift and Alt keys are down
2013-04-21 15:16:40 +01:00
Matt Pass
e3b4f0b159 v2.2 screenshot shown 2013-04-20 18:30:47 +01:00
Matt Pass
5c55939765 Farbtastic color picker integration feature 2013-04-20 18:01:36 +01:00
Matt Pass
bd69d00182 Version 2.2 2013-04-20 17:51:56 +01:00
Matt Pass
7312789e12 jsRegex plugin out, Regexplained in
jsRegex has been broken for a few weeks now and Regexplained has caught
my attention as a very good tool to understand regexes you're writing.
Swapped to this alternative.
2013-04-20 17:50:04 +01:00
Matt Pass
4e765e64ca Establish font size
According to config setting
2013-04-20 16:16:39 +01:00
Matt Pass
660f86018a Magic quotes catch, saving & applying font size
If magic quotes gpc is still on, the server has this set and the php.ini
file hasn't been able to turn it off. This section will remove the extra
slashes set by it to return the content back to normal.
Font size is now saved to the config file on update from settings screen
and also applied on the fly to currently open docs.
2013-04-20 16:16:15 +01:00
Matt Pass
b5050acba0 Set font size on updating settings
New font size passed thru to this function to apply to the class
property on demand
2013-04-20 16:13:24 +01:00
Matt Pass
2fa780236b Turn magic quotes gpc off
On systems that have magic quotes gpc (get post cookie) turned on,
attempt to turn off with a php.ini file. This works for some users but
is dependent on OS and server security settings as to whether this takes
effect.
2013-04-20 16:12:32 +01:00
Matt Pass
831770e7d8 Updateable font size
Font size is set from config setting.
New font size setting available for user input. On changing this, it
updates the CSS class.
2013-04-20 16:11:20 +01:00
Matt Pass
c50102e153 Font size set in body, not CSS reset
This is because we can't update the editor preview if the font size is
set in the CSS reset
2013-04-20 16:09:42 +01:00
Matt Pass
54088daa67 Replace \r\n and \r line endings with \n
To set it to Unix as the default. Opening files with \n line endings in
relatively modern programs will know to use line breaks here if not the
native OS preference
2013-04-20 16:08:26 +01:00
Matt Pass
169312f021 fontSize setting, set at 13px default 2013-04-20 16:07:03 +01:00
Matt Pass
62ab717772 Font size set from user settings
Updateable using settings screen, value in config.php
2013-04-20 16:06:29 +01:00
Matt Pass
6273bcdd3f Removed font-size
To allow the editor's font-size to be controlled by user
2013-04-20 16:05:49 +01:00
Matt Pass
5b894794dd Update to CodeMirror 3.12 2013-04-20 11:50:44 +01:00
Matt Pass
b31c41fdda Version 1.4
NON jQuery version
2013-04-19 08:54:24 +01:00
Matt Pass
2c6bcacb25 New functions to show color picker & insert value
CSS color preview now clickable to show color picker, passing color
value
showColorPicker function shows Farbtastic picker and if we have a color
passed as a param, it sets that
Also new function added to insert color which actually replaces token
value at current cursor position
2013-04-15 16:18:59 +01:00
Matt Pass
ed9b9881b6 Plugins container shifted, new tools contained 2013-04-15 16:13:37 +01:00
Matt Pass
2d2945cc5c Color picker icon added as new tool
Loading the Farbtastic lib too
2013-04-15 16:13:10 +01:00
Matt Pass
3b1a1fbbe2 Color picker icon 2013-04-15 16:10:52 +01:00
Matt Pass
be2f15f77b Farbtastic library added
Not a plugin, but a system level 'tool', so added in the root of
ICEcoder
2013-04-15 16:10:24 +01:00
Matt Pass
3c4872c231 indentSize and indentWithTabs
tabWidth is now indentSize
indentWithTabs is a new setting which can be true/false (false means
spaces)
Applied immediately after updating on settings screen
2013-04-14 14:12:18 +01:00
Matt Pass
8c605674f3 HTML mixed mode added
Needed to highlight docs that contain a mix of HTML, CSS, JS and PHP
2013-04-14 13:11:05 +01:00
mattpass
c1549faca1 Merge pull request #210 from mbirth/master
Use cURL for version check if allow_url_fopen is disabled
2013-03-25 13:33:56 -07:00
Markus Birth
f4b98cd4ff Versioncheck URL in variable to be re-used 2013-03-25 21:23:57 +01:00
Markus Birth
cbeac572f5 Added cURL support for version check if allow_url_fopen is disabled 2013-03-25 20:16:58 +01:00
Matt Pass
f94371f16c Version 2.1
Also mentioned HTML hinting in readme file
2013-03-23 16:38:36 +00:00
Matt Pass
7111a2aee3 Check for updates setting on setup screen
Checkbox added below password box on setup screen so users can choose
not to check for updates before even setting up
2013-03-23 16:28:11 +00:00
Matt Pass
cc82304996 overCloseLink flag and position new tab on close
The 3 x instances where we define closeTabLink needs the
setting/unsetting of a new var flag called overCloseLink. This is so we
can choose not to start or end a drag function.
After processing a closeTab function, set canSwitchTabs back to true in
0.1s
Finally, the newTab left position should be set according to the length
of open files, not 1 less than it and we also need to have a tab width
of 0 but compensate for the padding, so needs to be -18
2013-03-22 16:52:43 +00:00
Matt Pass
3d91b8ab13 Can only start or end tab drag if not over close
Can only begin tabDragStart or tabDragEnd functions if overCloseLink is
false
2013-03-22 16:46:46 +00:00
Matt Pass
9a4ae52df0 show-hint and html-hint now in JS file
Now these are tested and available from the compression helper, I have
created a new JS file to include these 2 files and removed the temporary
hotfix stored in the editor.php file.
2013-03-22 15:55:08 +00:00
Matt Pass
466b6bb1dd Upgrade to CodeMirror 3.11 2013-03-22 08:09:00 +00:00
Matt Pass
facf511621 HTML hint added
Show HTML hint if that's our content type
2013-03-22 08:08:47 +00:00
Matt Pass
c4cada924e Upgrade to CodeMirror 3.11 2013-03-22 08:06:28 +00:00
Matt Pass
99b8a02c0e TinyPNG URL plugin added 2013-03-20 19:18:12 +00:00
Matt Pass
b74ed1490a Default cursor to retain app like feel
Applied to 5 different areas that were previously showing a text cursor
2013-03-20 18:59:16 +00:00
Matt Pass
02f64e318d Title tooltip for codeAssist
To explain what it's used for
2013-03-20 18:58:28 +00:00
Matt Pass
2938014b33 Set tabs on mouse y over 62px not mouseout 2013-03-20 18:41:16 +00:00
Matt Pass
45040555f0 onMouseOut of tabsBar setTabWidths 2013-03-20 18:28:17 +00:00
Matt Pass
591ec57c49 nest display err catching and tab sliding
Only show nest display if we have the cM variable
On close setTabWidths with param to only set newTab position
If we have that param, get values for the last tab by setting i to the
last tab, but if we don't have posOnlyNewTab set, we can set widths &
left pos's of tabs.
2013-03-20 18:27:38 +00:00
Matt Pass
d5626ab7df tab and newTab transitions
tabs have with & left transitions and newTab has left transitions of
0.15s
gives us a nice sliding effect
2013-03-20 18:11:10 +00:00
Matt Pass
2a25efba1a Only show test suite if not in demo mode 2013-03-19 17:17:57 +00:00
Matt Pass
9197d24fff Check for file/folder at location before adding 2013-03-19 17:11:37 +00:00
Matt Pass
9fa87c5141 Get rid of global, CSS & Voke URL tweak
Create a new var - cursorTemp and reduce the amount of code used to set
cursor position
The left side of 1st nest tag should have a cursor: pointer styling
Simplify and tweak the CTRL+i code to prefix voke.fm URLs with CSS or
PHP
2013-03-18 17:10:12 +00:00
Matt Pass
dddf2e9ea1 Arrow now pointing other way 2013-03-17 19:25:23 +00:00
Matt Pass
69ea8838cd Remove default text from these 2 DIVs
Only set on establishing state
2013-03-17 19:24:54 +00:00
Matt Pass
33ea31f1fa Show/hide text next to nest display
New array item for nestDisplayText
Clear this to begin with then set with text if we have a nest, clear
otherwise
Only show the cursor position item if we have a nest
2013-03-17 19:23:49 +00:00
Matt Pass
e2adcabc5b Open file promp function added & help updated
Prompt opens asking user to input relative file path, which on hitting
OK will attempt to open. Triggered with CTRL+o shortcut, which is also
added to help screen. Also clarified CTRL+g and noted it's anywhere, not
elsewhere.
2013-03-16 12:54:04 +00:00
Matt Pass
a33ded4409 New shortcuts, rearranging & tidy up
Shortcuts added for duplicate line & remove line.
Also moved all file manager and more general shortcuts to the right,
giving editing shortcuts more room. Make all alpha keys lowercase and
clarified a couple of areas such as left click instead of just click.
2013-03-16 12:38:03 +00:00
Matt Pass
6161518d8b duplicateLine & removeLine functions
Functions added to duplicate line and remove line. Triggered from CTRL+
+ and CTRL+ - shortcuts whilst in editor area.
2013-03-16 12:28:52 +00:00
Matt Pass
bf40cb2009 Use voke.fm for PHP and CSS searches
Continue to use Google for other searches
2013-03-16 12:06:35 +00:00
Matt Pass
12f8315a84 Voke.fm added as a plugin 2013-03-16 12:06:01 +00:00
Matt Pass
0f460483f3 Show tagName or content after nest display 2013-03-16 11:03:11 +00:00
Matt Pass
bf22cd1638 Now considering depth on highlight nest
Made this chunk of code active by removing 1==2 condition.
Now also defining 3 events in a variable and applying to text section
and arrow start ends. Also needed cursor: pointer.
2013-03-16 10:42:26 +00:00
Matt Pass
e656c89ba1 Hotfix for tagRangeFinder added
Added hotfix of rewritten tagRangeFinder function that Marijn wrote
yesterday. Can be removed when CodeMirror 3.2 is released and we upgrade
to that.
2013-03-16 10:41:05 +00:00
Matt Pass
b8416ed4c1 Version 2.0 2013-03-14 17:50:38 +00:00
Matt Pass
62b8e18c9e New screenshot and requirements only PHP 5 2013-03-14 17:49:47 +00:00
Matt Pass
1e09ccbc0c Extra code to find target tag
Without this extra code, we would just be finding the previous tag with
the matching name and not consider the depth. This code sets the cursor
inside the potentially correct tag, gets the nest location without
updating the display and if it's not at the correct depth, do i++ so we
end up with another for loop to find the tag previous to that one and so
on. The only way to escape out of this is to find a tag at the right
depth.
Set ch before line in the object, so it's similar to the order of the
endPos object.
2013-03-14 17:21:02 +00:00
Matt Pass
76717f6141 Remove ambiance mobile, set FG/BG on 3 themes
The mobile version of ambiance needs the main ambiance class too and I'm
not concerned about this, so dropping. 3 other themes needed a FG & BG
color set to make text visible. Fixed in ICEcoder and also put in a pull
request to CodeMirror.
2013-03-12 17:57:36 +00:00
Matt Pass
33308688aa Ignore deleting nothing & strip trailing slashes
Don't ask the user for any confirmation if there is nothing to delete.
This could occur when you select something, delete it, then try to
delete again.
We need to also strip trailing slashes for deleting files when updating
the file manager. This is much like what we needed to do with adding
files to the root of the file manager. Locations should end without a
trailing slash, but a root is a trailing slash as its only char. A regex
here solves the issue.
2013-03-11 17:40:42 +00:00
Matt Pass
df481aaf07 Ensure we have a slash for the root level
Need a slash to specify the root level when updating the file manager
2013-03-11 17:37:55 +00:00
Matt Pass
82190b330b Remove console.log and taller help screen
Help screen needs to accomodate 2 new shortcuts
2013-03-11 09:02:18 +00:00
Matt Pass
19d8103806 Add shortcut for h1-h7 and line breat at end 2013-03-11 09:01:44 +00:00
Matt Pass
30b6120582 h1-h7 added as tag wrappers, plus line breaker
Can now use the CTRL+Alt+ num 1-7 shortcuts to wrap in h1-h7 tags
Can now also CTRL+Alt+Enter to add a br tag at end of line
2013-03-08 17:38:14 +00:00
Matt Pass
b7aa8bd56c Check if we have a nextSibling first
Test if we have a nextSibling before determining a tagName. This is so
if we have a dir with only subdirs (ie, no files) and the last subdir is
empty, there will be no UL list (which we're looking to maybe remove).
2013-03-08 14:28:18 +00:00
Matt Pass
4aad818888 Remove line return
Was causing issues with adding to root. Needs to be just like its set in
lib/get-branch.php
2013-03-08 14:18:49 +00:00
Matt Pass
68a51af239 Remove trailing slashes on 4 instances
Mainly to cover the root so / becomes nothing so we don't end up with a
double slash. Worth removing anyway incase it's passed elsewhere
somehow/through the API.
2013-03-08 14:17:21 +00:00
Matt Pass
80d64ae4e0 Look to PHP_SELF and not FILE
Will get the correct path for this location both online and locally
2013-03-08 13:32:58 +00:00
Matt Pass
cd295e2315 Initial text file used in unit tests 2013-03-07 09:46:18 +00:00
Matt Pass
80bdd6761b Start of unit tests
Tests 4 things for now - opening, updating, saving & closing
Needs a lot of refining, but the basics of testing and also waiting for
tests to return and failing after 10 secs of waiting are all there
2013-03-07 09:46:01 +00:00
Matt Pass
bf0798d397 object.watch polyfill lib 2013-03-07 09:45:03 +00:00
Matt Pass
e130a87e81 iFrame added to run unit tests within 2013-03-07 09:44:33 +00:00
Matt Pass
34e22c63a0 Show unit test section if we have this available
Contains link to start unit test and DIV to contain result stats as they
run
2013-03-07 09:44:18 +00:00
Matt Pass
70db2a15f4 Shuffle of people who helped in some way with v2 2013-03-05 16:47:34 +00:00
Matt Pass
aaa7be7bff Identify path slashes differently & drop PHP_EOL
Windows may use backslahes as it's dir seperator, but under some PHP
installs it uses the Linux forward slash instead. We could use the
directory seperator PHP var, but I've heard mixed opinions on this and
would rather just detect by looking at what $path, which contains
$docRoot, which is from the $_SERVER variable as this would be more
reliable.
It also wasn't showing the replace button due to a PHP_EOL which ended
the JS string with quote termination.
2013-03-04 16:58:35 +00:00
Matt Pass
000fda848b Get filemtime after saving
We weren't getting the new filemtime after saving and using the
$filemtime var value prior to the save. Needs to be reestablished prior
to setting the array value.
2013-03-04 12:56:58 +00:00
Matt Pass
c0f0595ad7 No need to have die messages
We have user visible alerts now instead so they know when there is a
problem. Much better.
2013-03-04 10:12:09 +00:00
Matt Pass
62ad6dde67 Correction to previous condition swapping
Put the isset bit before the comparison bit, but made a mistake with the
parens bit. This is how it should be.
2013-03-04 10:11:32 +00:00
Matt Pass
8750fe7a43 Pasting of folders in same dir adds (num)
If the dir exists, run thru from 2 to 1billion looking for next
available number and set the $dest name as that. All exactly the same as
how it works for pasting files.
2013-03-02 21:59:01 +00:00
Matt Pass
b0f0bb10ec Pass manual version no value as string
As it may be '2.0 beta', for instance.
2013-03-02 21:45:09 +00:00
Matt Pass
e05f276b6a Condensing & removing code & tweaks
Tweaking comments to be more accurate
Removed snippetLine, no longer used
Handling openClose dir in a more simplistic way, only need to define
iframe.src once
Replaced text is no longer lowercase
Setting the cursor by setting zone as a variable and then using that
Removed 2 x calls to removeSnippet, no longer a function
Correcting unnecessary .parent
2013-03-02 20:59:08 +00:00
Matt Pass
a075934168 Alert user with message if we can't update config
Show a message informing user we can't update config file if we can't
update this when updating settings or previously opened files
2013-03-02 18:18:23 +00:00
Matt Pass
5898ebb5f0 Remove file & folder count
Remove build up of vars, data, functions and triggering the update of
this on load
2013-03-02 18:14:04 +00:00
Matt Pass
d122c83535 No longer dealing with opening thru display
We are no longer setting display block here, this is now done once we
have injected the DOM elems into the tree at that dir. Once that is
done, we set the display to block. We still set none here when
collapsing. This avoids a flash of possibly unsorted files.
2013-03-02 17:17:05 +00:00
Matt Pass
2025e8f10b Check if fileMDT doesn't exist first
Performing comparison when it doesn't is an error. Just swap aruments.
2013-03-02 17:13:39 +00:00
Matt Pass
3339a63268 Link to site, clickable logo, root and people
Logo is now clickable to ICEcoder site and link also added
If we have no root, show as a /
Add Emmet in people list
Also add extra thanks at end to Github contributors
2013-03-02 17:02:07 +00:00
Matt Pass
3d2eef2a69 Now shows st,nd,rd,th on date & no 0 prefixes 2013-03-02 17:00:32 +00:00
Matt Pass
aa9f1074bd Fomatting fix, removed tabs 2013-03-02 16:59:47 +00:00
Matt Pass
545ba36db4 Fixed broken tags 2013-03-02 16:59:27 +00:00
Matt Pass
53b8979861 Syntax only, removing spaces for tabs 2013-03-02 16:59:09 +00:00
Matt Pass
0569a4b633 Remove redundant full tree code
No longer need to consider depths as we are getting folder/file listings
for 1 branch at a time. For this reason, the opening UL will always be
block and the closing one shown when it's the last item and $GET
location is available (ie, not the root).
2013-03-02 16:28:46 +00:00
Matt Pass
cc306475b2 Condensing code & fileMDT fallbacks
Ternary expression to get same saveType results
Create a new $filemtime var and set to 1000000 for non Linux systems
We now have something to compare with
(Tho will always be this on Windows etc)
2013-03-02 16:26:02 +00:00
Matt Pass
3f0982dd7c Tiny color tweak 2013-03-02 16:23:31 +00:00
Matt Pass
017ef727ab Put root LI on one line like subdir items 2013-03-02 14:12:01 +00:00
Matt Pass
1f1635ede3 Don't look to nextSibling again 2013-03-02 13:30:54 +00:00
Matt Pass
f2f2e780b0 Condense onto 1 line and remove extra line break 2013-03-02 13:30:31 +00:00
Matt Pass
f32e7df86a Only do DIV if location, tweak perms & slice fix
We don't want to have the DIV tag as part of the nest, so tuck the start
& end tags into the if $_GET location statements, so they only appear
with get-branch and never get injected into the tree
Instead of not showing perms span tags, show them with blank content
Due to format changes, we need to change the slice range to 28 and -7
2013-03-02 12:49:30 +00:00
Matt Pass
030e219cbd Don't reload root on click & put things on 1 line 2013-03-02 12:35:28 +00:00
Matt Pass
111e8c82c4 Trimming zipTgt and exclude array fix
If we are passing a zip target location, this needs to be trimmed to
avoid a double slash
Also, if we don't have an exclude value provided to make an array from,
use an empty array instead
2013-03-02 11:45:14 +00:00
Matt Pass
d0aad8589d Remove tabs indent setting, update Adminer 2013-03-02 11:27:26 +00:00
Matt Pass
c7eb890ffe Indent tabs setting removed, deleting config fix
Indent tabs removed as a setting
If you are logged in, but have no password set, log user out
(they end up on set password screen then)
2013-03-02 11:27:06 +00:00
Matt Pass
47a9bde70b Indent tabs removed as a setting 2013-03-02 11:24:59 +00:00
Matt Pass
7abadcc6c3 Note added on Emmet using Tabs now 2013-03-02 11:23:53 +00:00
Matt Pass
8a52bcfec2 Updated CSS file for 3.6.3 2013-03-02 11:23:22 +00:00
Matt Pass
81770d2182 New icon (from Twitter avatar) 2013-03-02 11:23:02 +00:00
Matt Pass
0ed030fae3 v1 release
Short tag swapped for <?php tag
Unnecessary parens removed
2013-03-02 11:22:33 +00:00
Matt Pass
a8dd0632f2 Adminer updated to 3.6.3 2013-03-02 11:21:43 +00:00
Matt Pass
04f7e84642 Set $finfo as a blank var to begin with 2013-03-01 17:43:08 +00:00
Matt Pass
efda17ecfa No need to trim $icv, & format indent code 2013-03-01 17:22:27 +00:00
Matt Pass
11c9bf39ff Wording switch only 2013-03-01 17:21:35 +00:00
Matt Pass
c41cfe5ae2 Fix to CodeMirror display area
CodeMirror v3.1 extended it's CSS margin bottom by 30px. Plus also
change BG style font etc to be more in line with editor.php.
2013-03-01 16:48:22 +00:00
Matt Pass
61c6270edd XAMPP needs more specific path
Possibly because index.php is calling lib/settings.php and this in turn
is calling config.php from it's location. Most web servers know you're
calling from the same dir but maybe XAMPP is thinking config.php should
be included from the index.php location? Anyway, fixed with a more
specific path.
2013-03-01 16:23:10 +00:00
Matt Pass
1fe5e6ad8e Set $fileAtts to nothing as a fallback
Strict PHP modes will complain this isn't set otherwise
2013-03-01 16:21:28 +00:00
Matt Pass
8c7fbcd7d4 Fallback for finfo_open
Detect if the finfo_open function is available and if not, grab the file
extension and compare against an array to work out accepted text based
and image based file types to know wether to open in editor or pop open
as an image
2013-03-01 16:20:51 +00:00
Matt Pass
6746fdb98e Upgrade to Emmet for CM 3.1
Needs the tab key removed from keyMap, will look into why this is
2013-03-01 09:02:59 +00:00
Matt Pass
4cf48bb50f Clearer notes on using online or offline 2013-02-28 10:33:32 +00:00
Matt Pass
80a4e54802 Enabling root to be collapsed and condensing code
Added 2nd param to root level so it can be collapsed now.
Also condensed how we're outputting the perms info for the root.
2013-02-28 09:30:07 +00:00
Matt Pass
c19a958629 Change of copyright year & formatting tweaks 2013-02-28 09:18:48 +00:00
Matt Pass
9b969087a5 Byte saving techniques and tweaks
Reducing bytes in a number of places, plus also:
Switching back to previous match highlighter without image data URI, as
is it more visible
Only setting line class for current line if we haven't selected multiple
lines
2013-02-27 17:54:45 +00:00
Matt Pass
121de8090f Remove extra line at end of file 2013-02-27 17:52:05 +00:00
Matt Pass
ae18a10fd8 Update nesting indicator on close tab
Particularly crucial when you close the last tab, so it removes the nest
items of the last doc
2013-02-27 16:27:55 +00:00
Matt Pass
05b0ef75c9 Only set newFileName if not false (ie, something) 2013-02-27 16:09:33 +00:00
Matt Pass
8dfad0aa5d v2.0 beta 2013-02-27 08:12:33 +00:00
Matt Pass
b07f2e9633 Tag wrappers & config template features added 2013-02-27 08:12:20 +00:00
Matt Pass
6ecc435b85 Boot users if not logged in 2013-02-26 17:35:09 +00:00
Matt Pass
a0a70495f0 Always set the scanDir to $docRoot.$iceRoot 2013-02-26 16:57:17 +00:00
Matt Pass
29981dfd52 rename get-tree to get-branch 2013-02-26 16:48:56 +00:00
Matt Pass
86735ac3b7 Upgrade to CodeMirror 3.1 2013-02-26 16:45:14 +00:00
Matt Pass
e5a1a10101 Help screen wider, not as tall
Due to adding extra shortcuts to Help screen, it needs to be bigger to
accomodate this info
2013-02-26 16:30:56 +00:00
Matt Pass
f362a83cfa Add 8 tag wrapper shortcuts & 2 column format
8 new tag wrapper shortcuts added and moving from 1 column to 2 because
of this extra info
2013-02-26 16:30:08 +00:00
Matt Pass
df902fb08e Pull classes out of .help class
We have 2 div containers now, so just define key, plus and shortcut in
isolation
2013-02-26 16:28:51 +00:00
Matt Pass
29de36f348 Removing branch & branchReload, this now default
No need to work with the treeType of branch or branchReload, as
reloading branches are now the default and only tree type
2013-02-26 13:15:09 +00:00
Matt Pass
92e7603aa5 Don't look to nextSibling & open/close fix
No need to set node to nextSibling again, only once is needed
If condition is now else if and calling the get-tree.php script
subsequent times and only if we're opening
This means we fix the open/close dir problem and also reload the dir
each time we open
2013-02-26 13:14:06 +00:00
Matt Pass
e3431f201c Setting treeType is no longer an option
Branch loading is now the default and only way to view a tree
2013-02-26 13:10:18 +00:00
Matt Pass
5c7a6bbf8f No longer creating full trees
Evolved to a branch loading system only, none of this needed anymore
2013-02-26 13:09:36 +00:00
Matt Pass
d6a82d1962 Change of latest version URL, not JSON encoded
Now calling /latest-version which is a tidier URL and also passing user
version no to this
This URL now tracks usage via Google Analytics, so I can begin to get an
idea of which version nos users are on, geo data, overall usage etc
No longer using json_encode as it's not JSON encoded, instead splitting
on line breaks and grabbing first array value as the version no
2013-02-25 16:39:46 +00:00
Matt Pass
a7a5ada4d9 openCloseDir changes onClick & gets dir branch
Change onclick event by setting 2nd param to false so it doesn't reload
Broke setting of node.nextSibling down into 2 new items, may revise this
If we're due to load, pass that through to get-tree.php in the
fileControl iFrame to begin the process
2013-02-24 17:19:51 +00:00
Matt Pass
6ff50cb42d 4 x vars moved to get-tree.php
Need to make use of these for branch injection too
2013-02-24 17:17:00 +00:00
Matt Pass
7ffc89f41b Now working with branch loading!
Only include settings file if we don't have ICEcoder settings available
Need 4 x vars for fileCounts etc available here
Contain tree within DIV which we can get the innerHTML of later for
branch injection
Need .$location when determining if a dir or not and also as part of the
path
If it's a folder and we have a treeType of branch or branchReload, add
true as the 2nd param, false otherwise
If we have a location, we're branch injecting, so get the target DOM
elem, create a new UL, set the style of it, remove whatever UL may be
there before, take the DIV innerHTML with the UL and /UL tags chopped
off, make it the innerHTML of our UL and finally inject into the DOM at
the right position.
2013-02-24 17:15:19 +00:00
Matt Pass
8c1131442b Keep root level out of get-tree.php
This is so we can call get-tree.php and just get the UL list at a dir
location
2013-02-24 14:09:16 +00:00
Matt Pass
c49acc9084 Get a specific dir if treeType is a branch type
Boot user out if not logged in
If the treeType is branch or branchReload, scan the dir at the specific
location, sort into dir and files arrays, nat case sort them and merge.
This is then finalArray and can be used to create the UL list
2013-02-24 13:53:53 +00:00
Matt Pass
f03cfcb0e3 Only create full tree if treeType is 'full'
No need to do any of this if not, so wrapped in an if condition to
exclude otherwise
2013-02-24 13:43:04 +00:00
Matt Pass
460d7c5aea treeType added as a setting
root setting text input a bit smaller to allow for this new dropdown
treeType dropdown added with 3 options for full, branch & branchReload
2013-02-24 13:41:06 +00:00
Matt Pass
50fd681420 treeType setting now updated, with quotes 2013-02-24 13:39:37 +00:00
Matt Pass
70c8ca3a55 Move treeType setting
Move nearer root setting, makes logical sense to be near each other,
plus we only update settings down to tabWidth from settings screen,
would be out of this updated section otherwise.
2013-02-24 13:37:37 +00:00
Matt Pass
1234f789a4 Move display of UL list into include file
This is so we can use for other purposes shortly, such as different
treeTypes
2013-02-24 11:20:07 +00:00
Matt Pass
25fd009be3 Focus on editor in 4ms
Wasn't focusing after switch, this solves the issue
2013-02-24 11:07:02 +00:00
Matt Pass
9ffab47f83 fileManager() gone, new openCloseDir() function
The fileManager function was only being called once onLoad of files.php
This was really only adding onClick events and setting classNames and
style.displays, no need to do this really with JS, merged into files.php
as it's creating the tree
openCloseDir function now available to deal with open & close of dirs
This is less code, less JS to run on boot and paves the way towards
multiple treeTypes
2013-02-20 18:09:00 +00:00
Matt Pass
38c46f3d5c Merge onClick events & removing fileManager()
Remove triggering fileManager() onLoad, this is the only place it's used
Set the class, style and onClick events to replicate what that function
was doing
2013-02-20 18:05:48 +00:00
Matt Pass
3a0c33c5cf treeType setting added 2013-02-20 18:03:07 +00:00
Matt Pass
5d6b057361 Replace URL special chars when folder sorting
When sorting folders into order, special chars such as $, -, _ etc were
causing sorting issues while other chars such as _ worked OK. This is
all due to the char's ref in relation to a-z, 0-9 and A-Z chars in the
char table. By replacing these URL special chars (defined in RFC 1738
specification) with a \ (the only char not allowed in a file/folder
name), we are levelling these chars out, so we can safely focus on
alphanum sorting only.
2013-02-20 09:34:29 +00:00
Matt Pass
8fcbdc8ea0 Reinstate files.php only
Stupid line breaks
2013-02-20 09:32:19 +00:00
Matt Pass
a774f9052d Tag wrap on a tag cursor pos & other Esc = cancel
Need to set cursor position to start line, not end
Accidentally removed cancel shortcut
2013-02-18 09:58:27 +00:00
Matt Pass
2d79b5a988 Reset fileInput and only act if we have file
Reset fileInput back to an empty value after upload (success or fail)
Only if value isn't empty action the upload
2013-02-17 18:04:32 +00:00
Matt Pass
86ae5e14b4 Remove the child on delete
Instead of just hiding. So we can delete an item and create a new one of
the name name at that dir location without issues.
2013-02-17 17:47:06 +00:00
Matt Pass
8153d4a139 Spelling fix - Folders 2013-02-17 17:32:28 +00:00
Matt Pass
3e80d86628 Change install info to 757 on backups & lib dirs 2013-02-17 17:26:59 +00:00
Matt Pass
a097330772 Duplicates config template file on boot
If the config file doesn't exist, create a new one by copying the
template file
2013-02-17 17:26:25 +00:00
Matt Pass
5545743bd8 config-sample.php is now config-template.php 2013-02-17 16:53:22 +00:00
mattpass
ccd212f839 Merge pull request #156 from aharris88/master
Ignore config.php
2013-02-17 08:30:54 -08:00
Matt Pass
5697625a7d Line breaks and indents for DIV tag wrapping
If the user is wrapping the selected with a DIV tag, add line breaks
were needed and indentation as appropriate.
2013-02-17 16:26:10 +00:00
aharris88
3d54005332 Rename config.php to config-sample.php and ignore config.php 2013-02-15 11:56:15 -06:00
Matt Pass
a5894dfae8 Alt key down flag & tag wrapper
New variable flag for altKeyDown just like ctrlKeyDown
Restructured key tracking system into more modular chunks
If CTRL+Alt+key, check if we need to trigger tagWrapper function.
Currently have 8 common tags setup (for div, span, p, a, b, i, strong,
em)
tagWrapper function receives any tag and wraps selected text with that
tag
If it's an a tag tho, it adds a href="" to the start and sets cursor
between quotes
2013-02-15 10:28:17 +00:00
Matt Pass
b3aa6e37b9 Arrow pointing to logo, dataMessage DIV
When in demoMode, there is an arrow now pointing to the logo as a quick
guide to using ICEcoder. Will likely be only used by the ICEcoder
website.
dataMessage DIV available to display on demand and insert content into
Slight adjust to subsequent data/info content.
2013-02-12 20:01:12 +00:00
Matt Pass
e4e7661a3d Now passing dataMessage instead of alert
No longer showing alert message, was a bit annoying. This is a better
solution, shows how out of date you are and also provides a link to the
ICEcoder website to get an update.
2013-02-12 19:58:45 +00:00
Matt Pass
9fe38ad649 Taller help screen and dataMessage function
Help screen is now taller to accomodate 4 new FM actions
dataMessage function available to display DIV and then add message into
it on demand
2013-02-12 19:57:40 +00:00
Matt Pass
a8a03a831a Info on 4 x file manager actions
Provide info on left click, double click, CTRL + click and right click
2013-02-12 19:56:13 +00:00
Matt Pass
0df4db9286 Big arrow added 2013-02-12 19:55:03 +00:00
Matt Pass
e4599e3076 Hide paste option until we have copied something
Changes display from none to block when we copy a file/folder ref.
2013-02-11 17:12:59 +00:00
Matt Pass
1a0d8933dc Adjust style values
Now we have an extra stylesheet, this should be [3] not [2]
The class ref for the tabs class is actually [5] not [4]
2013-02-11 17:08:21 +00:00
Matt Pass
00af30281c Fix bad comment tag, revise matchhilight styles
The comment after .CodeMirror-scroll should be inside /* */
Merge matchhighlight and the focused version, add pseudo styles to
override main selected style. May look at changing this in future.
As we removed a class, the tab class is no longer the 6th, but now 5th
class
2013-02-11 17:07:19 +00:00
Matt Pass
8c85b3098d Inform user if there is no file/folder to copy 2013-02-09 17:18:23 +00:00
Matt Pass
000607f8e0 Considering empty folder should be opposite arg
Should be if the childNodes.length < 3, was doing the opposite. Oops!
2013-02-09 15:43:47 +00:00
Matt Pass
82e3698dd2 Change of operator to consider empty files
Was giving false positives on false, !==false is what we require here
2013-02-09 15:42:20 +00:00
Matt Pass
0dd9535a5b Allow opening of empty files
Allow 'empty' to appear in the MIME type, so we can accept things such
as application/x-empty, which indicates an empty file. Wouldn't open
them previously.
2013-02-09 15:07:45 +00:00
Matt Pass
088b3f60ea tagNestExceptions array removed
No longer used (was only used by the ropey close tag system, now
removed)
2013-02-09 14:50:02 +00:00
Matt Pass
c118159121 Selected text forced to be white on blue 2013-02-09 14:49:10 +00:00
Matt Pass
5fad745220 Remove old close tag system, tweak highlights
Old and quite ropey close tag system removed in favour of the
CodeMirrror closetag addon
2 x classes to define highlighted text now forced to be white on blue
everywhere
2013-02-09 14:48:41 +00:00
Matt Pass
02b41bfbdc Matchhilight & autoCloseTags updates
CSS class changed needed for matchhilight and removed color setting
snippetFrame now unused, removed
2 new options set to autoCloseTags and highlightSelectionMatches
No longer setting thisCM.matchHighlight anymore
Set a if 1==2 condition on the previous (and quite ropey) code that did
autoclosing to stop it happening, will remove next.
2013-02-09 14:03:52 +00:00
Matt Pass
82ab3faca3 Upgrade CodeMirror to 3.02 2013-02-09 13:27:13 +00:00
Matt Pass
df74757e83 Quick test only 2013-02-08 17:02:10 +00:00
Matt Pass
a21772f3c2 New screenshot & 2 new features 2013-02-08 14:55:35 +00:00
Matt Pass
cbd930a340 Version 1.6 2013-02-08 14:33:21 +00:00
Matt Pass
9f129c9781 Tidying up recent changes re tabs
tagDragMouseXStart should be tabDragMouseXStart
Ensuring vars are defined at top of function & in usage order
Forgot a var in the foor loop
2013-02-08 14:32:45 +00:00
Matt Pass
18931e94b0 Move 5 x tab functions to tabs section of file 2013-02-08 14:03:19 +00:00
Matt Pass
1520828dff Set tabWidth to begin with
To avoid having a gap after closing all tabs
Also removed thisWidth, moved this value into tabWidth value
2013-02-08 13:56:55 +00:00
Matt Pass
43223d1677 Perform alphanum sort on files not paths
Run new currentArrayFull array inline with currentArray
This provides a full path and the currentArray then becomes a file array
only
nextValueFull provides the value which we find the index of to insert
into alphaArray
2013-02-08 13:44:43 +00:00
Matt Pass
3fb9836fc8 Tab dragging, sortTabs, alphaTabs & dynamic close
closeButtons now take the parent nodes' ID to know what to close, also
image inside has no ID anymore, targetted via
childNodes[0].childNodes[0] from parent tab
var diffX at top of function
Setting both tabSlide and tabDrag classes on start of tab dragging now
Massively improved and finished tabDragStart, tabDragMove & tabDragEnd
functions
New functions - sortTabs and alphaTabs
No need to get cM on redoTabHightlight, and it also sets the close tab
BG color by targeting the child elems, no need to consider or update an
ID on this anymore.
Now asking to close on all tabs
2013-02-08 10:57:49 +00:00
Matt Pass
8cd5a10ea8 Trigger tabDragEnd onmouseup on html tag
This is so you can drag and release in either the editor or files areas
and it will release the tab.
2013-02-08 10:21:48 +00:00
Matt Pass
da1850896b alphaTabs button & this.id on 2 x hardcoded items
New alphaTabs button added next to closeAllTabs
Titles added to both so user knows what these are
The argument on the mousedown and mouseup events now look to the ID of
the item, rather than being hardcoded values. This is so we only have to
change the ID on the tab and the rest falls into line.
No longer doing onmouseup here, this is now handled at the top level
(index.php)
2013-02-08 10:19:18 +00:00
Matt Pass
336ef01dee loadedFile to replace all & chars for textarea
This is so &amp; becomes &amp;amp; ...what you draw out of the textarea
is then &amp;
In turn this allows all HTML entities of this style to work and as we
aren't using PHP's htmlentities(), we don't end with junk chars on
slanted apostrophes, degree symbols etc.
2013-02-08 10:12:35 +00:00
Matt Pass
246bf189b5 tabDrag and alphaTabs classes
New tabDrag class to determin transition of 0s
New alphaTabs class to show next to closeAllTabs button
Move closeAllTabs across to make room for this
2013-02-08 10:09:34 +00:00
Matt Pass
825effadd9 Syntax formatting change only 2013-02-08 10:05:04 +00:00
Matt Pass
51f53855f8 Alpha tabs button added 2013-02-08 10:04:24 +00:00
Matt Pass
65fa29fbb8 Determining which tabs to swap on release
When you release the mouse after dragging now, we're able to decide
which tabs were swapped.
2013-02-04 09:04:34 +00:00
Matt Pass
5bcfa06e19 New refresh FM icon 2013-02-04 09:03:20 +00:00
Matt Pass
b01218958f Tab dragging working with variable widths
Not working to the 150px default, now working to the possibly smaller
tab widths
2013-02-03 17:24:21 +00:00
Matt Pass
7887f0e7a1 Tab sliding and opacity
On start of the drag, all tabs apart from the one we are dragging are
given the additional tabSlide class so they slide in the background.
Better use of swapWith variable and now setting background tabs position
more effectively plus also setting opacity and returning to full opacity
on release of mouse button.
On that event we also add the tabSlide class on our released tab so it
slides into place, set the tab widths/positions again and after 150ms
(after our released tab has finished it's slide transition), reset the
zIndex, classname for everything back to the initial state.
2013-02-03 16:58:12 +00:00
Matt Pass
f522502938 Classes to transition tabs left 0.15s
By default this is 0s, tabs other than the one being dragged is given
the extra tabSlide class so they slide around in the background. The tab
being dragged will also slide into place when the mouse button is
released.
2013-02-03 16:52:30 +00:00
Matt Pass
c7f533cf0a New tab dragging system & del removeSnippet
Previously we were using HTML5 dragging, but this is too freerange, we
want to restrict to a region and x-axis only. Replaced with new system,
doesn't actually do anything yet when you release mouse but UI works.
Deleted the removeSnippet function, no longer used.
2013-02-03 15:19:55 +00:00
Matt Pass
a3107de33e tab & newTab absolute positioning & zindex of 1
So we can control their position easily
2013-02-03 15:13:25 +00:00
Matt Pass
e69a3249e5 Updating to work with new tab dragging
onMouseUp on HTML tag now triggers tabDragEnd
Tabs no longer have 'draggable' attribute, onMouseDown replaces onClick,
which also fires tabDragStart event and onMouseUp also fires tabDragEnd
newTab has an ID so we can control it
2013-02-03 15:11:38 +00:00
mattpass
f3c24f05e0 Merge pull request #152 from aharris88/master
.gitkeep files for empty directories
2013-02-01 14:42:49 -08:00
aharris88
20364bb1d7 Replace placeholder backups/readme.txt with .gitkeep 2013-02-01 15:59:49 -06:00
mattpass
3d1c92dae4 Merge pull request #149 from aharris88/master
Add .gitignore file to ignore backups and error-log
2013-02-01 11:27:41 -08:00
aharris88
4048895c6b Ignore backups and error-log 2013-02-01 12:01:24 -06:00
aharris88
991908bd8d Add elseif onto if statement in lib/settings.php 2013-02-01 11:56:29 -06:00
mattpass
8ff559dbef Merge pull request #147 from aharris88/master
header issue #146
2013-02-01 09:31:34 -08:00
aharris88
d7d483ef9c Fix header issue #146 2013-02-01 11:25:13 -06:00
Matt Pass
b11064e3a8 Autoopen for more than 0 files, transparent close
Only prompt to open if we have 0 files
Close button is transparent if not changed
2013-02-01 16:05:12 +00:00
Matt Pass
409d35b29b Asks if you want to open previous files on boot
Now shows ask message to ask if you'd like to open previous files.
Also shows the no of files and list
2013-02-01 13:44:28 +00:00
Matt Pass
811cf40cd7 Close all tabs sets new arg for setPreviousFiles
closeAllTabs now passes 2nd arg to closeTab, setting true if we've got
more tabs to close, false if not. The dontSetPV arg determins if we
should setPreviousFiles or not. This means we only set this once all
tabs have been closed.
Also fixed issue with setting previousFiles, wasn't setting on 'CLEAR',
ie, no tabs open. Now sets a blank to handle this.
2013-01-31 17:59:44 +00:00
Matt Pass
3aa9d23ac6 wireframe|cc added as a URL plugin 2013-01-31 14:35:44 +00:00
Matt Pass
9c8bb08454 Remove htmlentities() to avoid junk chars
Not needed and just caused junk/rubbish.
2013-01-31 14:05:47 +00:00
Matt Pass
2c28af0dd7 Check if !ctrlKeyDown on deciding on change
An estimated 20% of the time CTRL+key combos would register as a change.
Readded checking on !ctrlKeyDown to fix this.
2013-01-24 07:54:25 +00:00
Matt Pass
cc6bd40b15 Var name fix, should be $renamed 2013-01-24 07:36:11 +00:00
Matt Pass
5221ba0959 Shows server message to indicate file upload
Users aren't always aware if a file upload has happened OK, this server
message helps put the point across.
2013-01-23 19:48:56 +00:00
Matt Pass
61f132327d Type boosting on function, removed fallback
Removed 'f ' as a type booster, now being more specific by requiring the
user type 'function'. This is consistent with if and for. It also won't
work as the autocomplete script will want to trigger instead and display
items starting with 'f'.
Removed showing the snippet display as a fallback.
2013-01-23 19:39:59 +00:00
Matt Pass
826730e88b Code completion added for JS via simple hint
Simple hint .css, .js and the javascript hinter added
No need to have Ctrl-Up or Down to do nothing, handled in icecoder.js
Ctrl-Space triggers the autocomplete command
This is setup as a function which runs if the cursor is in a JS block
2013-01-23 19:37:51 +00:00
Matt Pass
5cdb08c35f Using CodeMirror 3.01 now 2013-01-23 19:35:17 +00:00
Matt Pass
9806d3705a Snippet display no longer fallback
If you now hit CTRL+space and you're not expanding function, if or for,
it will fallthrough the CodeMirror addon of code completion rather than
show this snippet info screen.
2013-01-23 19:34:57 +00:00
Matt Pass
55e6e66df6 Update CodeMirror 3 to 3.01, incl code hinting
Also includes simple-hint.js, javascript-hint.js and simple-hint.css
2013-01-23 19:33:40 +00:00
Matt Pass
0d38b23a60 Fixed tab filename display & rename title
Simplified background on .tab class, also set it to relative positioning
and removed text having a RTL direction and being right aligned. Then
set the .closeTab class to also be absolutely positioned and 7px from
the right edge. Now the text is left aligned and close tab link right
aligned!
Renaming open tabs also now updates title
Fixed 2 x titles to have slashes at start now we aren't using RTL
direction
2013-01-22 20:26:08 +00:00
Matt Pass
07fd0ab6bf Fixes to rename processes
renameFile didn't have i var set, so I have set this to be what is
expected so we can now rename open files again.
shortURL was having it's slashes replaced with pipes in a few areas but
not all which meant it wasn't changing the onmouseover argument. Now
doing this on setting the var now which means a fix and less code.
Also forgot to alter the title attribute, now changing that on rename
too.
2013-01-22 20:01:54 +00:00
Matt Pass
6036b0635d Error catching on rename function
Test if the rename has taken place and only if it has, call
updateFileManagerList etc. If it hasn't set the renamed var to false. If
renamed var is false, show the improved error message (gives note on
permissions).
2013-01-22 19:58:21 +00:00
Matt Pass
74f678076a Don't update openFiles array on upload
Calling updateFileManagerList now includes a 6th argument and if a true
value is passed, then it's indicating an uploaded file and shouldn't set
the openFiles array value.
2013-01-22 18:49:48 +00:00
Matt Pass
ef157d71f2 Version 1.5 2013-01-18 17:19:47 +00:00
Matt Pass
0b718e0fbf Styling of a elems for manual link 2013-01-18 17:09:42 +00:00
Matt Pass
809af86c16 Link to manual from Help screen
Passes through version number to be used by function in the URL that
shows the manual
2013-01-18 17:08:26 +00:00
Matt Pass
449e8e2c4a Function to show the ICEcoder manual
Shows the manual in the mediaContainer popup, also passing through the
version number so in the future we can show relevant info.
2013-01-18 17:07:09 +00:00
Matt Pass
01c8a10463 DOCTYPE must be set before anything else
By setting doctype before settings.php, the script elements etc are
loaded after defining the doctype to be html5. This issue only affects
IE9 and not Chrome or Firefox.
2013-01-18 12:59:41 +00:00
Matt Pass
27da7ed0fe Close all tabs function added
Close button added to left of tabs as close all button. Simple styling
added to match tabs. closeAllTabs function added to close all tabs from
last back to first.
2013-01-18 12:13:09 +00:00
Matt Pass
685116c555 Can now pass mode argument to switchMode()
Allows you to set a mode to use via the API
2013-01-18 11:50:16 +00:00
Matt Pass
0c4741c793 Disallow traversing to parent dir 2013-01-15 11:54:12 +00:00
Matt Pass
4da7024f91 Upload files function added
This function will get uploaded file details for each file uploaded and
when uploaded, move the file to the user selected folder. Also shows
error message if there is an issue. Either way, when finished it will
clear the selectedFiles, file menu and hide the loading mask to return
user to normal view.
2013-01-15 11:47:31 +00:00
Matt Pass
b49a2cc52d 2 new functions to select & submit uploaded files
Select function sets uploadedDir hidden form field and clicks the file
input button for user. Submit function is automatically triggered when
files value changes, which then shows the loading screen and submits the
form. preventDefault is also needed here.
2013-01-15 11:45:06 +00:00
Matt Pass
c0fe50cd2f Upload files option added
Clicking on new 'Upload File(s)' option triggers a function to click the
file input button. onChange of this value, the submit function is called
to post the form
2013-01-15 11:43:24 +00:00
Matt Pass
497efaabf0 Fixing multiple & path issies in delete function
Establish a fullPath to begin with and use that
Only show relative path in message re not being able to delete
2013-01-13 16:10:19 +00:00
Matt Pass
2ee777739f Paste same name files with postfixed next nos
$dest now has double slashes replaced with singles
Now also considers if a file exists before copying
If it does, next available number up to 1 billion postfixed to end of
filename
Copy with that new filename, next number postfixed
Slight adjust to filename shown in file manager to match
2013-01-13 15:13:34 +00:00
Matt Pass
deb3ad5359 Logout link added
Logout link added to left of version no, next to logo in top right
Clicking this triggers the logout function, which directs the browser to
the same window location with ?logout QS
The settings.php file is run again (via inclusion) and finding the QS
var, sets the loggedIn var set to false (as a double measure to the
session also being destroyed) and header location boots user back to
login screen
2013-01-13 14:37:36 +00:00
Matt Pass
3f1801ef2b Postfix comparison to check path
Establish a stringExtra value of a slash or nothing depending on wether
we are considering the root level or not
When comparing the folder against the selectedFile array value, postfix
both with a slash (could be any char though). This is to eliminate path
mismatches.
2013-01-13 13:46:59 +00:00
Matt Pass
ca8e92e443 Establish cM and consider in if statement
Avoids errors on content = cM.getValue line
2013-01-13 13:09:46 +00:00
Matt Pass
c514e4a1ad Replace pipes with slahes before opening URL 2013-01-13 12:53:59 +00:00
Matt Pass
ec28de40c9 Checkerboard BG behind image popups
Show checkerboard image behind image popups so you can see transparent
areas on images. Needed black BG as a fallback too.
2013-01-13 12:47:48 +00:00
Matt Pass
14053fbfdd Fixed banned & selected finding issues
Remove old echo test message
Added new $foundInSelFile var
Both this and bFile are false to begin with
Testing on not false of bannedFile in strpos
If we find our matching item is one of our selected files, set
$foundInSelFile to true
Only if we don't have a banned file and either we have no selected
files, or we do have some and have a match, push to array etc
PHP_EOL's to make source easier to read
2012-12-30 19:24:17 +00:00
Matt Pass
464030808c No need to preload the snippet display
Doesn't help with repainting issue
2012-12-30 19:20:43 +00:00
Matt Pass
d2377bff34 Close button for snippet-display 2012-12-30 19:20:09 +00:00
Matt Pass
d3f378f6bd Version 1.4 screenshot 2012-12-30 17:27:22 +00:00
Matt Pass
09e1562fbc Version 1.4 2012-12-30 17:15:24 +00:00
Matt Pass
4e14ac6d9b Added JS Regex plugin & rearranged order
Icon also added, made one up
2012-12-30 17:13:19 +00:00
Matt Pass
97882f0c60 Emmet icon updated
Used circular version
2012-12-30 17:12:49 +00:00
Matt Pass
482a5cfb11 Now loads snippet-display.php from lib folder 2012-12-30 17:12:30 +00:00
Matt Pass
f73dee1103 Snippets display moved & now for info
Snippets display file now moved to lib folder
Functionality removed from this file and now just used for info purposes
Tidied up look and provided table of uses, plus note on Emmet's tab key
2012-12-30 17:11:50 +00:00
Matt Pass
9034e1ad45 for added as a abbreviation 2012-12-30 17:06:31 +00:00
Matt Pass
7e35481b62 Typo on img src 2012-12-30 13:52:34 +00:00
Matt Pass
2f87f2adc3 Emmet feature added and new screenshot 2012-12-30 13:50:34 +00:00
Matt Pass
6b345ac041 Load Emmet if available, start keyMap
Load the emmet.min.js file if available
Remove extraKeys and start a new keyMap, as extraKeys was overriding
Emmet
Falls through to default keyMap
2012-12-30 13:33:23 +00:00
Matt Pass
19e18f6a10 Emmet plugin added 2012-12-30 13:30:59 +00:00
Matt Pass
f181cef9e9 No need for space var, lCLen-4 not 3 2012-12-27 17:56:47 +00:00
Matt Pass
dd19c39cf8 Declaring function vars and adjusting var name
Establishing vars at beginning of function to stop them being globals
lineNo2 now lineCount
2012-12-27 14:33:07 +00:00
Matt Pass
5887a9c755 Tabs contain only filename
No longer show path as well
(This is now shown on hover)
2012-12-27 13:37:05 +00:00
Matt Pass
ca35084160 Updates to class names & properties for CM3
Now gutters and linenumber
Also moved width to gutters class, aligned text right and lightened
right border
2012-12-27 13:31:19 +00:00
Matt Pass
644eee0aca Tweaks to tab styling
Box shadow y-pos now 50px to be visible on the tabs bar
Tabs bar BG now slightly lighter
Tabs now #eee on left border instead of #fff
2012-12-27 13:30:02 +00:00
Matt Pass
510a0c1087 Rounded tabs, moved box shadow, tabbar BG
Tabs now have rounded corners at top
Moved the box shadow down by 80px so it's only seen to right of file
manager
tabsBar now has lighter colour BG
2012-12-27 12:32:44 +00:00
Matt Pass
4afbe4c2fc Only add tags to array if not undefined 2012-12-27 11:37:58 +00:00
Matt Pass
6cf36cc99c No longer include a space after comment tag
Remove space after comment tags such as //, /* and #
This is to avoid JS Hint errors and also be less stylised
2012-12-27 11:23:06 +00:00
Matt Pass
b98127e83a Changed URL only
To try and get new screenshot in readme file
2012-12-24 13:52:08 +00:00
Matt Pass
f7f195f083 Extra couple of features added to list 2012-12-24 13:48:29 +00:00
Matt Pass
22e6228a08 Version 1.3 2012-12-24 13:16:00 +00:00
Matt Pass
b757e42c88 JS hint icon altered
Now includes word HINT
2012-12-24 12:53:01 +00:00
Matt Pass
fdf1ef1cb7 Now considering indents and better templates
Indents are now considered when completing the snippet
Replaced the mix of various template elements with uppercase
alternatives (VAR, INDENT & CURSOR)
2012-12-21 08:43:25 +00:00
Matt Pass
4797ff84d8 Quick effort at getting snippet notations working
You can now press CTRL+space to have your shorthand notation completed.
2 options for function and if setup so far.
What I've written is a pretty horrible hacky effort to get this working.
It does work but needs a LOT of refining.
2012-12-20 22:12:27 +00:00
Matt Pass
3937d733f0 QS var cleaning, removing test logs and /
strClean on GET var selectedFiles
Remove 2 x console.logs
Remove commented text
2 x areas need first slash removing and ending with a slash
Need to var thisWidth to avoid global
2012-12-20 17:15:26 +00:00
Matt Pass
0328643c7c Now only loads file if it exists
if file_exists needs now wraps load PHP and JS code to allow escaping
and server message when files don't exist
2012-12-18 09:15:13 +00:00
Matt Pass
80c73523e3 No need to globally replace end colon
There will be only one
2012-12-18 08:49:07 +00:00
Matt Pass
8c5747798d Tabs now have closelink fist as it's RTL and clear first slash and end
with one for same reason
Else if conditions to give better perf
newBlock has a z-index of 1000 to show above code
Show titles on tab hovers
New setTabWidths function to reset tab widths on demand
2012-12-17 09:06:46 +00:00
Matt Pass
bdf6dbd096 Meta noindex, nofollow, set & clear gutter marks
Meta robots of noindex, nofollow to stop it being indexed by search
engines
Set & clear gutter with line no etc, need to look at using this for code
folding
2012-12-17 09:04:21 +00:00
Matt Pass
0eaef469f9 Tabs change color hover 2012-12-17 08:59:59 +00:00
Matt Pass
f2d3615e26 Tabs RTL dir, r-align, nowrap, hidden overflow
This is to allow them to be cropped off to the left side if not big
enough
2012-12-17 08:52:28 +00:00
Matt Pass
24f05a1c03 Meta robots noindex, nofollow
Don't allow ICEcoder installations to be indexed by search engines
Remove a couple of console logs from testing.
2012-12-17 08:50:11 +00:00
Matt Pass
570642d820 Meta robots noindex, no follow & dont selectTheme
Don't want ICEcoder installs showing up on search engine results
Also no need to selectTheme onChange of linewrapping select menu
2012-12-17 08:48:41 +00:00
Matt Pass
fd794f99d2 UTF-8 and meta robots noindex, nofollow
Need UTF-8 settings like other pages and don't want ICEcoder
installation showing up on search engine results
2012-12-17 08:47:41 +00:00
Matt Pass
9a95bae6ba Meta robots noindex, nofollow
To stop ICEcoder showing up on search engine results
2012-12-17 08:46:43 +00:00
Matt Pass
1b04504617 Find in selectedFiles & fix to find in filenames
Get an array of selectedFiles if there is one
Fix by resetting foundInSelected on each loop
targetURL is now lowercase as standard
Only provide results if it's a file
Also only provide results if the beginning of the path matches and
either the targetURL is the same or if it forms the beginning
Set $bFile = true if the file which contains our match doesn't match the
selected file
2012-12-17 08:40:37 +00:00
Matt Pass
2a2cd81149 Pass thru list of selected files on find/replace
If we choose selected files when performing a find/replace, build up a
colon seperated list and tack on as a querysting
2012-12-17 08:29:12 +00:00
Matt Pass
2bb961b7a8 Now only loads & runs if JSHint is available
Script only loads if file is available
Processes in function only run if JSHINT is available
2012-12-13 09:16:13 +00:00
Matt Pass
01b035d7af Clear or set JS Hints based on codeAssist
On toggle of codeAssist and being false, clear all JS Hint widgets in
all tabs
If turned on though, set in current tab
Run updateHints on switching tab (helps complete above step)
2012-12-13 08:56:53 +00:00
Matt Pass
8d0de398fd Only if codeAssist is on run JS Hint 2012-12-13 08:54:21 +00:00
Matt Pass
2ebec54476 Line Wrapping and Banned Paths Options
New options available to set in the settings screen
Also passes through to useNewSettings function for in session changes
A couple of other minor changes to style and layout
2012-12-12 17:56:43 +00:00
Matt Pass
b66d5fe8d3 Slight tweaks to CSS and commented code 2012-12-12 09:23:58 +00:00
Matt Pass
0f989f249f Moving function to the info & display section 2012-12-12 09:23:02 +00:00
Matt Pass
6980bdcf7f No need for 3rd arg here 2012-12-11 18:05:11 +00:00
Matt Pass
975a016974 Added width setting twice 2012-12-11 18:04:57 +00:00
Matt Pass
4be1b45896 Upgrading to CM v3 from v3 RC2
Upgrading to official v3 released now it's been released
2012-12-11 17:35:57 +00:00
Matt Pass
8e10824189 Sent argument and returned objected are different
It now takes a {line, ch} object as second argument, instead of an
integer, and will return a {from: {line, ch}, to: {line, ch}} object.
2012-12-11 11:53:06 +00:00
Matt Pass
1a881b4eaf JS Hint available as icon
Takes user to website for now
2012-12-10 17:57:17 +00:00
Matt Pass
2a9e91dd55 JS Hint Icon styles, vars & clear & set timeout
New styles for icon shown in widget
Var waiting used by setTimeout and and widgets array
Set & clear timeouts on change of editor content
2012-12-10 17:56:45 +00:00
Matt Pass
725ea8999a Load the JS Hint plugin JS file 2012-12-10 17:54:59 +00:00
Matt Pass
3427b736ec New updateHints function for JS Hint
Calls on JS Hint and returns with any errors and shows as a widget under
relevant line
This example code taken from CodeMirror's Widgets example
2012-12-10 17:54:43 +00:00
Matt Pass
1dde9d0198 JS Hint plugin added
Added as a plugin, will make optional in the future as a few hooks in
ICEcoder's code by default
2012-12-10 17:52:48 +00:00
Matt Pass
7577c3552d Folding on tag & braces again now
Folds according to the content/lang type at the cursor.
Nest step is to set the cursor to the clicked line, get the type and set
cursor back again, then we know what we can fold on.
2012-12-04 18:07:36 +00:00
Matt Pass
30de655fb2 CSS alts and moving to new on function
No longer setting BG color or color on CodeMirror class
onCursorActivity, onChange, onScroll and onGutterClick now set outside
of main codeMirror object and appended
Using addLineClass now instead of setLineClass
2012-12-03 19:14:20 +00:00
Matt Pass
09cf5589f5 Use addLineClass and removeLineClass
These are used in place of setLineClass now
2012-12-03 19:11:15 +00:00
Matt Pass
b206f8ab78 Remove caretLocType in nest & add/removeLineClass
Don't end the nestDisplay with the caretLocType, this is shown already
near the line/chr counter
For some reason, the array pos of the visible tabs is 4 not 5
Use new removeLineClass and addLineClass methods instead of setLineClass
2012-12-03 19:10:36 +00:00
Matt Pass
f358cdea5b Upgrading to CodeMirror v3 RC2 2012-12-03 19:04:16 +00:00
Matt Pass
14fe45bda8 Version 1.2 2012-12-01 14:35:49 +00:00
Matt Pass
72ff461b45 Nesting tags now have BG chevrons
Slight adjust to make text in footer look in line
'cursor nest locaton' wording starts with lowercase c
BG gif added which contains start, middle and end chevron graphics
Now showing DIV containing BG for start, middle or end chunks between
next tag names
2012-12-01 14:35:03 +00:00
Matt Pass
96fe7d46ba Scroll selected range into view
On hovering mouse over nest tags, scroll the start of the selected range
into view
2012-11-28 17:26:45 +00:00
Matt Pass
d40cdeb65e Syntax tidy up
Removed commented code, simplify parens & tabbed formatting
2012-11-28 17:04:01 +00:00
mattpass
4130df7bf9 Merge pull request #104 from kucerarichard/master
bannedPaths setting added and ignore Drupal modules as standard
2012-11-28 08:49:43 -08:00
Matt Pass
6e176cdda7 Upgrade to CodeMirror 2.36 2012-11-28 16:47:52 +00:00
Rich Kucera
bdb171dc6d add banned paths 2012-11-28 10:57:57 -05:00
Matt Pass
801471a105 3 new themes added
Ambiance altered to not include background image
(avoids file being 26k, instead 3k)
2012-11-25 16:58:55 +00:00
Matt Pass
f86cb53bd9 Standardise font size to 13px 2012-11-25 16:58:14 +00:00
Matt Pass
435e1b3b4b Now pastes files and folders
Also includes, sub folders & files
2012-11-25 16:22:36 +00:00
Matt Pass
4b17d76144 Extend 10 tabs to 100 tabs
10 tabs can sometimes be too few no one should ideally need more than
100 tabs open so this is a good new level.
Doesn't appear to impact on DOM or JS at all, especially as I don't need
to rework code to move to an unlimited tabs setup instead.
Having a limit also helps save crashing or bogging down the browser.
2012-11-25 14:18:36 +00:00
Matt Pass
d96ebe4282 Password protect based on ICEcoder password 2012-11-21 18:24:57 +00:00
Matt Pass
e5c5e7dc5e Terminal plugin added
Will die if in demoMode or not loggedIn
Code needs revising to enable extra login, set sudo etc if necessary?
2012-11-21 17:50:30 +00:00
Matt Pass
fe593dcb09 demoMode no longer saves opened files list 2012-11-18 11:10:13 +00:00
Matt Pass
b1056a19a3 Restrict demo mode to load only
Cannot only make new folder, paste, rename, replace text in file, change
perms, delete or save if demoMode is false
2012-11-17 18:43:32 +00:00
Matt Pass
048c47f7f3 demoMode setting added
demoMode bool added to ICEcoder array, false by default
If set to true and we have a password, set logginIn to true
$demoMode var equivalent to array var
demoMode must be false to possibly allow saving
2012-11-17 18:41:54 +00:00
166 changed files with 15942 additions and 4331 deletions

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
error-log.txt
backups/*
!backups/index.php
lib/config-*
plugins/*
!plugins/index.php
test/test-file1.txt
tmp/*
!tmp/index.php

File diff suppressed because one or more lines are too long

View File

@@ -1,174 +0,0 @@
.CodeMirror {
line-height: 1em;
font-family: monospace;
/* Necessary so the scrollbar can be absolutely positioned within the wrapper on Lion. */
position: relative;
/* This prevents unwanted scrollbars from showing up on the body and wrapper in IE. */
overflow: hidden;
}
.CodeMirror-scroll {
overflow: auto;
height: 300px;
/* This is needed to prevent an IE[67] bug where the scrolled content
is visible outside of the scrolling box. */
position: relative;
outline: none;
}
/* Vertical scrollbar */
.CodeMirror-scrollbar {
position: absolute;
right: 0; top: 0;
overflow-x: hidden;
overflow-y: scroll;
z-index: 5;
}
.CodeMirror-scrollbar-inner {
/* This needs to have a nonzero width in order for the scrollbar to appear
in Firefox and IE9. */
width: 1px;
}
.CodeMirror-scrollbar.cm-sb-overlap {
/* Ensure that the scrollbar appears in Lion, and that it overlaps the content
rather than sitting to the right of it. */
position: absolute;
z-index: 1;
float: none;
right: 0;
min-width: 12px;
}
.CodeMirror-scrollbar.cm-sb-nonoverlap {
min-width: 12px;
}
.CodeMirror-scrollbar.cm-sb-ie7 {
min-width: 18px;
}
.CodeMirror-gutter {
position: absolute; left: 0; top: 0;
z-index: 10;
background-color: #f7f7f7;
border-right: 1px solid #eee;
min-width: 2em;
height: 100%;
}
.CodeMirror-gutter-text {
color: #aaa;
text-align: right;
padding: .4em .2em .4em .4em;
white-space: pre !important;
cursor: default;
}
.CodeMirror-lines {
padding: .4em;
white-space: pre;
cursor: text;
}
.CodeMirror pre {
-moz-border-radius: 0;
-webkit-border-radius: 0;
-o-border-radius: 0;
border-radius: 0;
border-width: 0; margin: 0; padding: 0; background: transparent;
font-family: inherit;
font-size: inherit;
padding: 0; margin: 0;
white-space: pre;
word-wrap: normal;
line-height: inherit;
color: inherit;
overflow: visible;
}
.CodeMirror-wrap pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: normal;
}
.CodeMirror-wrap .CodeMirror-scroll {
overflow-x: hidden;
}
.CodeMirror textarea {
outline: none !important;
}
.CodeMirror pre.CodeMirror-cursor {
z-index: 10;
position: absolute;
visibility: hidden;
border-left: 1px solid black;
border-right: none;
width: 0;
}
.cm-keymap-fat-cursor pre.CodeMirror-cursor {
width: auto;
border: 0;
background: transparent;
background: rgba(0, 200, 0, .4);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#6600c800, endColorstr=#4c00c800);
}
/* Kludge to turn off filter in ie9+, which also accepts rgba */
.cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id) {
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite {}
.CodeMirror-focused pre.CodeMirror-cursor {
visibility: visible;
}
div.CodeMirror-selected { background: #d9d9d9; }
.CodeMirror-focused div.CodeMirror-selected { background: #d7d4f0; }
.CodeMirror-searching {
background: #ffa;
background: rgba(255, 255, 0, .4);
}
/* Default theme */
.cm-s-default span.cm-keyword {color: #708;}
.cm-s-default span.cm-atom {color: #219;}
.cm-s-default span.cm-number {color: #164;}
.cm-s-default span.cm-def {color: #00f;}
.cm-s-default span.cm-variable {color: black;}
.cm-s-default span.cm-variable-2 {color: #05a;}
.cm-s-default span.cm-variable-3 {color: #085;}
.cm-s-default span.cm-property {color: black;}
.cm-s-default span.cm-operator {color: black;}
.cm-s-default span.cm-comment {color: #a50;}
.cm-s-default span.cm-string {color: #a11;}
.cm-s-default span.cm-string-2 {color: #f50;}
.cm-s-default span.cm-meta {color: #555;}
.cm-s-default span.cm-error {color: #f00;}
.cm-s-default span.cm-qualifier {color: #555;}
.cm-s-default span.cm-builtin {color: #30a;}
.cm-s-default span.cm-bracket {color: #997;}
.cm-s-default span.cm-tag {color: #170;}
.cm-s-default span.cm-attribute {color: #00c;}
.cm-s-default span.cm-header {color: blue;}
.cm-s-default span.cm-quote {color: #090;}
.cm-s-default span.cm-hr {color: #999;}
.cm-s-default span.cm-link {color: #00c;}
span.cm-header, span.cm-strong {font-weight: bold;}
span.cm-em {font-style: italic;}
span.cm-emstrong {font-style: italic; font-weight: bold;}
span.cm-link {text-decoration: underline;}
span.cm-invalidchar {color: #f00;}
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
@media print {
/* Hide the cursor when printing */
.CodeMirror pre.CodeMirror-cursor {
visibility: hidden;
}
}

View File

@@ -1,21 +0,0 @@
.cm-s-erlang-dark { background: #002240; color: white; }
.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; }
.cm-s-erlang-dark .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
.cm-s-erlang-dark .CodeMirror-gutter-text { color: #d0d0d0; }
.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-erlang-dark span.cm-atom { color: #845dc4; }
.cm-s-erlang-dark span.cm-attribute { color: #ff80e1; }
.cm-s-erlang-dark span.cm-bracket { color: #ff9d00; }
.cm-s-erlang-dark span.cm-builtin { color: #eeaaaa; }
.cm-s-erlang-dark span.cm-comment { color: #7777ff; }
.cm-s-erlang-dark span.cm-def { color: #ee77aa; }
.cm-s-erlang-dark span.cm-error { color: #9d1e15; }
.cm-s-erlang-dark span.cm-keyword { color: #ffee80; }
.cm-s-erlang-dark span.cm-meta { color: #50fefe; }
.cm-s-erlang-dark span.cm-number { color: #ffd0d0; }
.cm-s-erlang-dark span.cm-operator { color: #dd1111; }
.cm-s-erlang-dark span.cm-string { color: #3ad900; }
.cm-s-erlang-dark span.cm-tag { color: #9effff; }
.cm-s-erlang-dark span.cm-variable { color: #50fe50; }
.cm-s-erlang-dark span.cm-variable-2 { color: #ee00ee; }

View File

@@ -1,4 +1,4 @@
Copyright (C) 2012 by Marijn Haverbeke <marijnh@gmail.com>
Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -17,7 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Please note that some subdirectories of the CodeMirror distribution
include their own LICENSE files, and are released under different
licences.

38
CodeMirror/addon/hint/show-hint.css vendored Normal file
View File

@@ -0,0 +1,38 @@
.CodeMirror-hints {
position: absolute;
z-index: 10;
overflow: hidden;
list-style: none;
margin: 0;
padding: 2px;
-webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
box-shadow: 2px 3px 5px rgba(0,0,0,.2);
border-radius: 3px;
border: 1px solid silver;
background: white;
font-size: 90%;
font-family: monospace;
max-height: 20em;
overflow-y: auto;
}
.CodeMirror-hint {
margin: 0;
padding: 0 4px;
border-radius: 2px;
max-width: 19em;
overflow: hidden;
white-space: pre;
color: black;
cursor: pointer;
}
li.CodeMirror-hint-active {
background: #08f;
color: white;
}

73
CodeMirror/addon/lint/lint.css vendored Normal file
View File

@@ -0,0 +1,73 @@
/* The lint marker gutter */
.CodeMirror-lint-markers {
width: 16px;
}
.CodeMirror-lint-tooltip {
background-color: infobackground;
border: 1px solid black;
border-radius: 4px 4px 4px 4px;
color: infotext;
font-family: monospace;
font-size: 10pt;
overflow: hidden;
padding: 2px 5px;
position: fixed;
white-space: pre;
white-space: pre-wrap;
z-index: 100;
max-width: 600px;
opacity: 0;
transition: opacity .4s;
-moz-transition: opacity .4s;
-webkit-transition: opacity .4s;
-o-transition: opacity .4s;
-ms-transition: opacity .4s;
}
.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning {
background-position: left bottom;
background-repeat: repeat-x;
}
.CodeMirror-lint-mark-error {
background-image:
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==")
;
}
.CodeMirror-lint-mark-warning {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=");
}
.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning {
background-position: center center;
background-repeat: no-repeat;
cursor: pointer;
display: inline-block;
height: 16px;
width: 16px;
vertical-align: middle;
position: relative;
}
.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning {
padding-left: 18px;
background-position: top left;
background-repeat: no-repeat;
}
.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=");
}
.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=");
}
.CodeMirror-lint-marker-multiple {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC");
background-repeat: no-repeat;
background-position: right bottom;
width: 100%; height: 100%;
}

55
CodeMirror/lib/codemirror-compressed.js vendored Normal file

File diff suppressed because one or more lines are too long

325
CodeMirror/lib/codemirror.css vendored Normal file
View File

@@ -0,0 +1,325 @@
/* BASICS */
.CodeMirror {
/* Set height, width, borders, and global font properties here */
font-family: monospace;
height: 300px;
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 div.CodeMirror-cursor {
border-left: 1px solid black;
}
/* Shown when moving in bi-directional text */
.CodeMirror div.CodeMirror-secondarycursor {
border-left: 1px solid silver;
}
.CodeMirror.cm-fat-cursor div.CodeMirror-cursor {
width: auto;
border: 0;
background: #7e7;
}
.CodeMirror.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;
}
@-moz-keyframes blink {
0% { background: #7e7; }
50% { background: none; }
100% { background: #7e7; }
}
@-webkit-keyframes blink {
0% { background: #7e7; }
50% { background: none; }
100% { background: #7e7; }
}
@keyframes blink {
0% { background: #7e7; }
50% { background: none; }
100% { background: #7e7; }
}
/* Can style cursor different in overwrite (non-insert) mode */
div.CodeMirror-overwrite div.CodeMirror-cursor {}
.cm-tab { display: inline-block; text-decoration: inherit; }
.CodeMirror-ruler {
border-left: 1px solid #ccc;
position: absolute;
}
/* DEFAULT THEME */
.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-header {color: blue;}
.cm-s-default .cm-quote {color: #090;}
.cm-s-default .cm-hr {color: #999;}
.cm-s-default .cm-link {color: #00c;}
.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-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 actuall 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;
z-index: 3;
}
.CodeMirror-gutter {
white-space: normal;
height: 100%;
display: inline-block;
margin-bottom: -30px;
/* Hack to make IE7 behave */
*zoom:1;
*display:inline;
}
.CodeMirror-gutter-wrapper {
position: absolute;
z-index: 4;
height: 100%;
}
.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;
}
.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-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor {
position: absolute;
border-right: none;
width: 0;
}
div.CodeMirror-cursors {
visibility: hidden;
position: relative;
z-index: 3;
}
.CodeMirror-focused div.CodeMirror-cursors {
visibility: visible;
}
.CodeMirror-selected { background: #d9d9d9; }
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
.CodeMirror-crosshair { cursor: crosshair; }
.CodeMirror ::selection { background: #d7d4f0; }
.CodeMirror ::-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; }

40
CodeMirror/theme/3024-day.css vendored Normal file
View File

@@ -0,0 +1,40 @@
/*
Name: 3024 day
Author: Jan T. Sott (http://github.com/idleberg)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
*/
.cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;}
.cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;}
.cm-s-3024-day.CodeMirror ::selection { background: #d6d5d4; }
.cm-s-3024-day.CodeMirror ::-moz-selection { background: #d9d9d9; }
.cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;}
.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; }
.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; }
.cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;}
.cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;}
.cm-s-3024-day span.cm-comment {color: #cdab53;}
.cm-s-3024-day span.cm-atom {color: #a16a94;}
.cm-s-3024-day span.cm-number {color: #a16a94;}
.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;}
.cm-s-3024-day span.cm-keyword {color: #db2d20;}
.cm-s-3024-day span.cm-string {color: #fded02;}
.cm-s-3024-day span.cm-variable {color: #01a252;}
.cm-s-3024-day span.cm-variable-2 {color: #01a0e4;}
.cm-s-3024-day span.cm-def {color: #e8bbd0;}
.cm-s-3024-day span.cm-bracket {color: #3a3432;}
.cm-s-3024-day span.cm-tag {color: #db2d20;}
.cm-s-3024-day span.cm-link {color: #a16a94;}
.cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;}
.cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;}
.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important;}

39
CodeMirror/theme/3024-night.css vendored Normal file
View File

@@ -0,0 +1,39 @@
/*
Name: 3024 night
Author: Jan T. Sott (http://github.com/idleberg)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
*/
.cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;}
.cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;}
.cm-s-3024-night.CodeMirror ::selection { background: rgba(58, 52, 50, .99); }
.cm-s-3024-night.CodeMirror ::-moz-selection { background: rgba(58, 52, 50, .99); }
.cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;}
.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; }
.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; }
.cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;}
.cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;}
.cm-s-3024-night span.cm-comment {color: #cdab53;}
.cm-s-3024-night span.cm-atom {color: #a16a94;}
.cm-s-3024-night span.cm-number {color: #a16a94;}
.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;}
.cm-s-3024-night span.cm-keyword {color: #db2d20;}
.cm-s-3024-night span.cm-string {color: #fded02;}
.cm-s-3024-night span.cm-variable {color: #01a252;}
.cm-s-3024-night span.cm-variable-2 {color: #01a0e4;}
.cm-s-3024-night span.cm-def {color: #e8bbd0;}
.cm-s-3024-night span.cm-bracket {color: #d6d5d4;}
.cm-s-3024-night span.cm-tag {color: #db2d20;}
.cm-s-3024-night span.cm-link {color: #a16a94;}
.cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;}
.cm-s-3024-night .CodeMirror-activeline-background {background: #2F2F2F !important;}
.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}

75
CodeMirror/theme/ambiance.css vendored Normal file

File diff suppressed because one or more lines are too long

38
CodeMirror/theme/base16-dark.css vendored Normal file
View File

@@ -0,0 +1,38 @@
/*
Name: Base16 Default Dark
Author: Chris Kempson (http://chriskempson.com)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
*/
.cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;}
.cm-s-base16-dark div.CodeMirror-selected {background: #303030 !important;}
.cm-s-base16-dark.CodeMirror ::selection { background: rgba(48, 48, 48, .99); }
.cm-s-base16-dark.CodeMirror ::-moz-selection { background: rgba(48, 48, 48, .99); }
.cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;}
.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; }
.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; }
.cm-s-base16-dark .CodeMirror-linenumber {color: #505050;}
.cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;}
.cm-s-base16-dark span.cm-comment {color: #8f5536;}
.cm-s-base16-dark span.cm-atom {color: #aa759f;}
.cm-s-base16-dark span.cm-number {color: #aa759f;}
.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;}
.cm-s-base16-dark span.cm-keyword {color: #ac4142;}
.cm-s-base16-dark span.cm-string {color: #f4bf75;}
.cm-s-base16-dark span.cm-variable {color: #90a959;}
.cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;}
.cm-s-base16-dark span.cm-def {color: #d28445;}
.cm-s-base16-dark span.cm-bracket {color: #e0e0e0;}
.cm-s-base16-dark span.cm-tag {color: #ac4142;}
.cm-s-base16-dark span.cm-link {color: #aa759f;}
.cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;}
.cm-s-base16-dark .CodeMirror-activeline-background {background: #202020 !important;}
.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}

38
CodeMirror/theme/base16-light.css vendored Normal file
View File

@@ -0,0 +1,38 @@
/*
Name: Base16 Default Light
Author: Chris Kempson (http://chriskempson.com)
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
*/
.cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;}
.cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;}
.cm-s-base16-light.CodeMirror ::selection { background: #e0e0e0; }
.cm-s-base16-light.CodeMirror ::-moz-selection { background: #e0e0e0; }
.cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;}
.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; }
.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; }
.cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;}
.cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;}
.cm-s-base16-light span.cm-comment {color: #8f5536;}
.cm-s-base16-light span.cm-atom {color: #aa759f;}
.cm-s-base16-light span.cm-number {color: #aa759f;}
.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;}
.cm-s-base16-light span.cm-keyword {color: #ac4142;}
.cm-s-base16-light span.cm-string {color: #f4bf75;}
.cm-s-base16-light span.cm-variable {color: #90a959;}
.cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;}
.cm-s-base16-light span.cm-def {color: #d28445;}
.cm-s-base16-light span.cm-bracket {color: #202020;}
.cm-s-base16-light span.cm-tag {color: #ac4142;}
.cm-s-base16-light span.cm-link {color: #aa759f;}
.cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;}
.cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;}
.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}

View File

@@ -1,9 +1,13 @@
/* Port of TextMate's Blackboard theme */
.cm-s-blackboard { background: #0C1021; color: #F8F8F8; }
.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; }
.cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; }
.cm-s-blackboard .CodeMirror-gutter { background: #0C1021; border-right: 0; }
.cm-s-blackboard .CodeMirror-gutter-text { color: #888; }
.cm-s-blackboard.CodeMirror ::selection { background: rgba(37, 59, 118, .99); }
.cm-s-blackboard.CodeMirror ::-moz-selection { background: rgba(37, 59, 118, .99); }
.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; }
.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; }
.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; }
.cm-s-blackboard .CodeMirror-linenumber { color: #888; }
.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }
.cm-s-blackboard .cm-keyword { color: #FBDE2D; }
@@ -16,10 +20,13 @@
.cm-s-blackboard .cm-string { color: #61CE3C; }
.cm-s-blackboard .cm-string-2 { color: #61CE3C; }
.cm-s-blackboard .cm-meta { color: #D8FA3C; }
.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
.cm-s-blackboard .cm-builtin { color: #8DA6CE; }
.cm-s-blackboard .cm-tag { color: #8DA6CE; }
.cm-s-blackboard .cm-attribute { color: #8DA6CE; }
.cm-s-blackboard .cm-header { color: #FF6400; }
.cm-s-blackboard .cm-hr { color: #AEAEAE; }
.cm-s-blackboard .cm-link { color: #8DA6CE; }
.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
.cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;}
.cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important}

View File

@@ -1,7 +1,11 @@
.cm-s-cobalt { background: #002240; color: white; }
.cm-s-cobalt.CodeMirror { background: #002240; color: white; }
.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; }
.cm-s-cobalt .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
.cm-s-cobalt .CodeMirror-gutter-text { color: #d0d0d0; }
.cm-s-cobalt.CodeMirror ::selection { background: rgba(179, 101, 57, .99); }
.cm-s-cobalt.CodeMirror ::-moz-selection { background: rgba(179, 101, 57, .99); }
.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; }
.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; }
.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-cobalt span.cm-comment { color: #08f; }
@@ -12,7 +16,10 @@
.cm-s-cobalt span.cm-meta { color: #ff9d00; }
.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }
.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; }
.cm-s-cobalt span.cm-error { color: #9d1e15; }
.cm-s-cobalt span.cm-bracket { color: #d8d8d8; }
.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }
.cm-s-cobalt span.cm-link { color: #845dc4; }
.cm-s-cobalt span.cm-error { color: #9d1e15; }
.cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;}
.cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important}

33
CodeMirror/theme/colorforth.css vendored Normal file
View File

@@ -0,0 +1,33 @@
.cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; }
.cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
.cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; }
.cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; }
.cm-s-colorforth .CodeMirror-linenumber { color: #bababa; }
.cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-colorforth span.cm-comment { color: #ededed; }
.cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; }
.cm-s-colorforth span.cm-keyword { color: #ffd900; }
.cm-s-colorforth span.cm-builtin { color: #00d95a; }
.cm-s-colorforth span.cm-variable { color: #73ff00; }
.cm-s-colorforth span.cm-string { color: #007bff; }
.cm-s-colorforth span.cm-number { color: #00c4ff; }
.cm-s-colorforth span.cm-atom { color: #606060; }
.cm-s-colorforth span.cm-variable-2 { color: #EEE; }
.cm-s-colorforth span.cm-variable-3 { color: #DDD; }
.cm-s-colorforth span.cm-property {}
.cm-s-colorforth span.cm-operator {}
.cm-s-colorforth span.cm-meta { color: yellow; }
.cm-s-colorforth span.cm-qualifier { color: #FFF700; }
.cm-s-colorforth span.cm-bracket { color: #cc7; }
.cm-s-colorforth span.cm-tag { color: #FFBD40; }
.cm-s-colorforth span.cm-attribute { color: #FFF700; }
.cm-s-colorforth span.cm-error { color: #f00; }
.cm-s-colorforth .CodeMirror-selected { background: #333d53 !important; }
.cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); }
.cm-s-colorforth .CodeMirror-activeline-background {background: #253540 !important;}

View File

@@ -11,15 +11,13 @@
.cm-s-eclipse span.cm-comment {color: #3F7F5F;}
.cm-s-eclipse span.cm-string {color: #2A00FF;}
.cm-s-eclipse span.cm-string-2 {color: #f50;}
.cm-s-eclipse span.cm-error {color: #f00;}
.cm-s-eclipse span.cm-qualifier {color: #555;}
.cm-s-eclipse span.cm-builtin {color: #30a;}
.cm-s-eclipse span.cm-bracket {color: #cc7;}
.cm-s-eclipse span.cm-tag {color: #170;}
.cm-s-eclipse span.cm-attribute {color: #00c;}
.cm-s-eclipse span.cm-link {color: #219;}
.cm-s-eclipse span.cm-error {color: #f00;}
.cm-s-eclipse .CodeMirror-matchingbracket {
border:1px solid grey;
color:black !important;;
}
.cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;}
.cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}

View File

@@ -6,5 +6,8 @@
.cm-s-elegant span.cm-qualifier {color: #555;}
.cm-s-elegant span.cm-keyword {color: #730;}
.cm-s-elegant span.cm-builtin {color: #30a;}
.cm-s-elegant span.cm-error {background-color: #fdd;}
.cm-s-elegant span.cm-link {color: #762;}
.cm-s-elegant span.cm-error {background-color: #fdd;}
.cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;}
.cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}

34
CodeMirror/theme/erlang-dark.css vendored Normal file
View File

@@ -0,0 +1,34 @@
.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; }
.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; }
.cm-s-erlang-dark.CodeMirror ::selection { background: rgba(179, 101, 57, .99); }
.cm-s-erlang-dark.CodeMirror ::-moz-selection { background: rgba(179, 101, 57, .99); }
.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; }
.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; }
.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-erlang-dark span.cm-atom { color: #f133f1; }
.cm-s-erlang-dark span.cm-attribute { color: #ff80e1; }
.cm-s-erlang-dark span.cm-bracket { color: #ff9d00; }
.cm-s-erlang-dark span.cm-builtin { color: #eaa; }
.cm-s-erlang-dark span.cm-comment { color: #77f; }
.cm-s-erlang-dark span.cm-def { color: #e7a; }
.cm-s-erlang-dark span.cm-keyword { color: #ffee80; }
.cm-s-erlang-dark span.cm-meta { color: #50fefe; }
.cm-s-erlang-dark span.cm-number { color: #ffd0d0; }
.cm-s-erlang-dark span.cm-operator { color: #d55; }
.cm-s-erlang-dark span.cm-property { color: #ccc; }
.cm-s-erlang-dark span.cm-qualifier { color: #ccc; }
.cm-s-erlang-dark span.cm-quote { color: #ccc; }
.cm-s-erlang-dark span.cm-special { color: #ffbbbb; }
.cm-s-erlang-dark span.cm-string { color: #3ad900; }
.cm-s-erlang-dark span.cm-string-2 { color: #ccc; }
.cm-s-erlang-dark span.cm-tag { color: #9effff; }
.cm-s-erlang-dark span.cm-variable { color: #50fe50; }
.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; }
.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; }
.cm-s-erlang-dark span.cm-error { color: #9d1e15; }
.cm-s-erlang-dark .CodeMirror-activeline-background {background: #013461 !important;}
.cm-s-erlang-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}

40
CodeMirror/theme/icecoder-classic.css vendored Normal file
View File

@@ -0,0 +1,40 @@
/* ICEcoder classic theme by Matt Pass */
.cm-s-icecoder-classic {color: #666; background: #161612}
.cm-s-icecoder-classic span.cm-keyword {color: #eee; font-weight:bold}
.cm-s-icecoder-classic span.cm-atom {color: #8b67cc}
.cm-s-icecoder-classic span.cm-number {color: #080}
.cm-s-icecoder-classic span.cm-def {color: #ca7919}
.cm-s-icecoder-classic span.cm-variable {color: #85b525}
.cm-s-icecoder-classic span.cm-variable-2 {color: #c71e5b}
.cm-s-icecoder-classic span.cm-variable-3 {color: #080}
.cm-s-icecoder-classic span.cm-property {color: #85b525}
.cm-s-icecoder-classic span.cm-operator {color: #080}
.cm-s-icecoder-classic span.cm-comment {color: #444}
.cm-s-icecoder-classic span.cm-string {color: #ccb100}
.cm-s-icecoder-classic span.cm-string-2 {color: #cc6d00}
.cm-s-icecoder-classic span.cm-meta {color: #555}
.cm-s-icecoder-classic span.cm-error {color: #d00}
.cm-s-icecoder-classic span.cm-qualifier {color: #555}
.cm-s-icecoder-classic span.cm-builtin {color: #0052a3}
.cm-s-icecoder-classic span.cm-bracket {color: #cc7}
.cm-s-icecoder-classic span.cm-tag {color: #e8e8e8}
.cm-s-icecoder-classic span.cm-attribute {color: #099}
.cm-s-icecoder-classic span.cm-header {color: #808}
.cm-s-icecoder-classic span.cm-quote {color: #070}
.cm-s-icecoder-classic span.cm-hr {color: #888}
.cm-s-icecoder-classic span.cm-link {color: #cc0}
.cm-s-icecoder-classic .CodeMirror-cursor {border-left: 1px solid white !important}
.cm-s-icecoder-classic .CodeMirror-selected {color: #fff !important; background: #037 !important}
.cm-s-icecoder-classic .CodeMirror-gutters {background: #161612; min-width: 41px; border-right: 0}
.cm-s-icecoder-classic .CodeMirror-linenumber {color: #555; cursor: default}
.cm-s-icecoder-classic .CodeMirror-matchingbracket {border: 1px solid grey; color: black !important}

View File

@@ -5,19 +5,19 @@ Ported to CodeMirror by Peter Kroon
.cm-s-lesser-dark {
line-height: 1.3em;
}
.cm-s-lesser-dark {
font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', Courier, monospace !important;
}
.cm-s-lesser-dark { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }
.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }
.cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/
.cm-s-lesser-dark.CodeMirror ::selection { background: rgba(69, 68, 59, .99); }
.cm-s-lesser-dark.CodeMirror ::-moz-selection { background: rgba(69, 68, 59, .99); }
.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-lesser-dark .CodeMirror-lines { margin-left:3px; margin-right:3px; }/*editable code holder*/
.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/
div.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
.cm-s-lesser-dark .CodeMirror-gutter { background: #262626; border-right:1px solid #aaa; padding-right:3px; min-width:2.5em; }
.cm-s-lesser-dark .CodeMirror-gutter-text { color: #777; }
.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; }
.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; }
.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; }
.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; }
.cm-s-lesser-dark span.cm-keyword { color: #599eff; }
.cm-s-lesser-dark span.cm-atom { color: #C2B470; }
@@ -32,7 +32,6 @@ div.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
.cm-s-lesser-dark span.cm-string { color: #BCD279; }
.cm-s-lesser-dark span.cm-string-2 {color: #f50;}
.cm-s-lesser-dark span.cm-meta { color: #738C73; }
.cm-s-lesser-dark span.cm-error { color: #9d1e15; }
.cm-s-lesser-dark span.cm-qualifier {color: #555;}
.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; }
.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; }
@@ -42,3 +41,7 @@ div.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
.cm-s-lesser-dark span.cm-quote {color: #090;}
.cm-s-lesser-dark span.cm-hr {color: #999;}
.cm-s-lesser-dark span.cm-link {color: #00c;}
.cm-s-lesser-dark span.cm-error { color: #9d1e15; }
.cm-s-lesser-dark .CodeMirror-activeline-background {background: #3C3A3A !important;}
.cm-s-lesser-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}

95
CodeMirror/theme/liquibyte.css vendored Normal file
View File

@@ -0,0 +1,95 @@
.cm-s-liquibyte.CodeMirror {
background-color: #000;
color: #fff;
line-height: 1.2em;
font-size: 1em;
}
.CodeMirror-focused .cm-matchhighlight {
text-decoration: underline;
text-decoration-color: #0f0;
text-decoration-style: wavy;
}
.cm-trailingspace {
text-decoration: line-through;
text-decoration-color: #f00;
text-decoration-style: dotted;
}
.cm-tab {
text-decoration: line-through;
text-decoration-color: #404040;
text-decoration-style: dotted;
}
.cm-s-liquibyte .CodeMirror-gutters { background-color: #262626; border-right: 1px solid #505050; padding-right: 0.8em; }
.cm-s-liquibyte .CodeMirror-gutter-elt div{ font-size: 1.2em; }
.cm-s-liquibyte .CodeMirror-guttermarker { }
.cm-s-liquibyte .CodeMirror-guttermarker-subtle { }
.cm-s-liquibyte .CodeMirror-linenumber { color: #606060; padding-left: 0;}
.cm-s-liquibyte .CodeMirror-cursor { border-left: 1px solid #eee !important; }
.cm-s-liquibyte span.cm-comment { color: #008000; }
.cm-s-liquibyte span.cm-def { color: #ffaf40; font-weight: bold; }
.cm-s-liquibyte span.cm-keyword { color: #c080ff; font-weight: bold; }
.cm-s-liquibyte span.cm-builtin { color: #ffaf40; font-weight: bold; }
.cm-s-liquibyte span.cm-variable { color: #5967ff; font-weight: bold; }
.cm-s-liquibyte span.cm-string { color: #ff8000; }
.cm-s-liquibyte span.cm-number { color: #0f0; font-weight: bold; }
.cm-s-liquibyte span.cm-atom { color: #bf3030; font-weight: bold; }
.cm-s-liquibyte span.cm-variable-2 { color: #007f7f; font-weight: bold; }
.cm-s-liquibyte span.cm-variable-3 { color: #c080ff; font-weight: bold; }
.cm-s-liquibyte span.cm-property { color: #999; font-weight: bold; }
.cm-s-liquibyte span.cm-operator { color: #fff; }
.cm-s-liquibyte span.cm-meta { color: #0f0; }
.cm-s-liquibyte span.cm-qualifier { color: #fff700; font-weight: bold; }
.cm-s-liquibyte span.cm-bracket { color: #cc7; }
.cm-s-liquibyte span.cm-tag { color: #ff0; font-weight: bold; }
.cm-s-liquibyte span.cm-attribute { color: #c080ff; font-weight: bold; }
.cm-s-liquibyte span.cm-error { color: #f00; }
.cm-s-liquibyte .CodeMirror-selected { background-color: rgba(255, 0, 0, 0.25) !important; }
.cm-s-liquibyte span.cm-compilation { background-color: rgba(255, 255, 255, 0.12); }
.cm-s-liquibyte .CodeMirror-activeline-background {background-color: rgba(0, 255, 0, 0.15) !important;}
/* Default styles for common addons */
div.CodeMirror span.CodeMirror-matchingbracket { color: #0f0; font-weight: bold; }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: #f00; font-weight: bold; }
.CodeMirror-matchingtag { background-color: rgba(150, 255, 0, .3); }
/* Scrollbars */
/* Simple */
div.CodeMirror-simplescroll-horizontal div:hover, div.CodeMirror-simplescroll-vertical div:hover {
background-color: rgba(80, 80, 80, .7);
}
div.CodeMirror-simplescroll-horizontal div, div.CodeMirror-simplescroll-vertical div {
background-color: rgba(80, 80, 80, .3);
border: 1px solid #404040;
border-radius: 5px;
}
div.CodeMirror-simplescroll-vertical div {
border-top: 1px solid #404040;
border-bottom: 1px solid #404040;
}
div.CodeMirror-simplescroll-horizontal div {
border-left: 1px solid #404040;
border-right: 1px solid #404040;
}
div.CodeMirror-simplescroll-vertical {
background-color: #262626;
}
div.CodeMirror-simplescroll-horizontal {
background-color: #262626;
border-top: 1px solid #404040;
}
/* Overlay */
div.CodeMirror-overlayscroll-horizontal div, div.CodeMirror-overlayscroll-vertical div {
background-color: #404040;
border-radius: 5px;
}
div.CodeMirror-overlayscroll-vertical div {
border: 1px solid #404040;
}
div.CodeMirror-overlayscroll-horizontal div {
border: 1px solid #404040;
}

37
CodeMirror/theme/mbo.css vendored Normal file
View File

@@ -0,0 +1,37 @@
/****************************************************************/
/* Based on mbonaci's Brackets mbo theme */
/* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */
/* Create your own: http://tmtheme-editor.herokuapp.com */
/****************************************************************/
.cm-s-mbo.CodeMirror {background: #2c2c2c; color: #ffffec;}
.cm-s-mbo div.CodeMirror-selected {background: #716C62 !important;}
.cm-s-mbo.CodeMirror ::selection { background: rgba(113, 108, 98, .99); }
.cm-s-mbo.CodeMirror ::-moz-selection { background: rgba(113, 108, 98, .99); }
.cm-s-mbo .CodeMirror-gutters {background: #4e4e4e; border-right: 0px;}
.cm-s-mbo .CodeMirror-guttermarker { color: white; }
.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; }
.cm-s-mbo .CodeMirror-linenumber {color: #dadada;}
.cm-s-mbo .CodeMirror-cursor {border-left: 1px solid #ffffec !important;}
.cm-s-mbo span.cm-comment {color: #95958a;}
.cm-s-mbo span.cm-atom {color: #00a8c6;}
.cm-s-mbo span.cm-number {color: #00a8c6;}
.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute {color: #9ddfe9;}
.cm-s-mbo span.cm-keyword {color: #ffb928;}
.cm-s-mbo span.cm-string {color: #ffcf6c;}
.cm-s-mbo span.cm-string.cm-property {color: #ffffec;}
.cm-s-mbo span.cm-variable {color: #ffffec;}
.cm-s-mbo span.cm-variable-2 {color: #00a8c6;}
.cm-s-mbo span.cm-def {color: #ffffec;}
.cm-s-mbo span.cm-bracket {color: #fffffc; font-weight: bold;}
.cm-s-mbo span.cm-tag {color: #9ddfe9;}
.cm-s-mbo span.cm-link {color: #f54b07;}
.cm-s-mbo span.cm-error {border-bottom: #636363; color: #ffffec;}
.cm-s-mbo span.cm-qualifier {color: #ffffec;}
.cm-s-mbo .CodeMirror-activeline-background {background: #494b41 !important;}
.cm-s-mbo .CodeMirror-matchingbracket {color: #222 !important;}
.cm-s-mbo .CodeMirror-matchingtag {background: rgba(255, 255, 255, .37);}

46
CodeMirror/theme/mdn-like.css vendored Normal file
View File

@@ -0,0 +1,46 @@
/*
MDN-LIKE Theme - Mozilla
Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>
Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues
GitHub: @peterkroon
The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation
*/
.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; }
.cm-s-mdn-like .CodeMirror-selected { background: #cfc !important; }
.cm-s-mdn-like.CodeMirror ::selection { background: #cfc; }
.cm-s-mdn-like.CodeMirror ::-moz-selection { background: #cfc; }
.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; }
.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; padding-left: 8px; }
div.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; }
.cm-s-mdn-like .cm-keyword { color: #6262FF; }
.cm-s-mdn-like .cm-atom { color: #F90; }
.cm-s-mdn-like .cm-number { color: #ca7841; }
.cm-s-mdn-like .cm-def { color: #8DA6CE; }
.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; }
.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; }
.cm-s-mdn-like .cm-variable { color: #07a; }
.cm-s-mdn-like .cm-property { color: #905; }
.cm-s-mdn-like .cm-qualifier { color: #690; }
.cm-s-mdn-like .cm-operator { color: #cda869; }
.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; }
.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; }
.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/
.cm-s-mdn-like .cm-meta { color: #000; } /*?*/
.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/
.cm-s-mdn-like .cm-tag { color: #997643; }
.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/
.cm-s-mdn-like .cm-header { color: #FF6400; }
.cm-s-mdn-like .cm-hr { color: #AEAEAE; }
.cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; }
.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; }
div.cm-s-mdn-like .CodeMirror-activeline-background {background: #efefff;}
div.cm-s-mdn-like span.CodeMirror-matchingbracket {outline:1px solid grey; color: inherit;}
.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); }

47
CodeMirror/theme/midnight.css vendored Normal file
View File

@@ -0,0 +1,47 @@
/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */
/*<!--match-->*/
.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; }
.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; }
/*<!--activeline-->*/
.cm-s-midnight .CodeMirror-activeline-background {background: #253540 !important;}
.cm-s-midnight.CodeMirror {
background: #0F192A;
color: #D1EDFF;
}
.cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
.cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;}
.cm-s-midnight.CodeMirror ::selection { background: rgba(49, 77, 103, .99); }
.cm-s-midnight.CodeMirror ::-moz-selection { background: rgba(49, 77, 103, .99); }
.cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;}
.cm-s-midnight .CodeMirror-guttermarker { color: white; }
.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
.cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;}
.cm-s-midnight .CodeMirror-cursor {
border-left: 1px solid #F8F8F0 !important;
}
.cm-s-midnight span.cm-comment {color: #428BDD;}
.cm-s-midnight span.cm-atom {color: #AE81FF;}
.cm-s-midnight span.cm-number {color: #D1EDFF;}
.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;}
.cm-s-midnight span.cm-keyword {color: #E83737;}
.cm-s-midnight span.cm-string {color: #1DC116;}
.cm-s-midnight span.cm-variable {color: #FFAA3E;}
.cm-s-midnight span.cm-variable-2 {color: #FFAA3E;}
.cm-s-midnight span.cm-def {color: #4DD;}
.cm-s-midnight span.cm-bracket {color: #D1EDFF;}
.cm-s-midnight span.cm-tag {color: #449;}
.cm-s-midnight span.cm-link {color: #AE81FF;}
.cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;}
.cm-s-midnight .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;
}

View File

@@ -1,9 +1,13 @@
/* Based on Sublime Text's Monokai theme */
.cm-s-monokai {background: #272822; color: #f8f8f2;}
.cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;}
.cm-s-monokai div.CodeMirror-selected {background: #49483E !important;}
.cm-s-monokai .CodeMirror-gutter {background: #272822; border-right: 0px;}
.cm-s-monokai .CodeMirror-gutter-text {color: #d0d0d0;}
.cm-s-monokai.CodeMirror ::selection { background: rgba(73, 72, 62, .99); }
.cm-s-monokai.CodeMirror ::-moz-selection { background: rgba(73, 72, 62, .99); }
.cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;}
.cm-s-monokai .CodeMirror-guttermarker { color: white; }
.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
.cm-s-monokai .CodeMirror-linenumber {color: #d0d0d0;}
.cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;}
.cm-s-monokai span.cm-comment {color: #75715e;}
@@ -14,14 +18,15 @@
.cm-s-monokai span.cm-keyword {color: #f92672;}
.cm-s-monokai span.cm-string {color: #e6db74;}
.cm-s-monokai span.cm-variable {color: #a6e22e;}
.cm-s-monokai span.cm-variable {color: #f8f8f2;}
.cm-s-monokai span.cm-variable-2 {color: #9effff;}
.cm-s-monokai span.cm-def {color: #fd971f;}
.cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;}
.cm-s-monokai span.cm-bracket {color: #f8f8f2;}
.cm-s-monokai span.cm-tag {color: #f92672;}
.cm-s-monokai span.cm-link {color: #ae81ff;}
.cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;}
.cm-s-monokai .CodeMirror-activeline-background {background: #373831 !important;}
.cm-s-monokai .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;

View File

@@ -7,3 +7,6 @@
.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }
.cm-s-neat span.cm-meta {color: #555;}
.cm-s-neat span.cm-link { color: #3a3; }
.cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;}
.cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}

43
CodeMirror/theme/neo.css vendored Normal file
View File

@@ -0,0 +1,43 @@
/* neo theme for codemirror */
/* Color scheme */
.cm-s-neo.CodeMirror {
background-color:#ffffff;
color:#2e383c;
line-height:1.4375;
}
.cm-s-neo .cm-comment {color:#75787b}
.cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3}
.cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a}
.cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328}
.cm-s-neo .cm-string {color:#b35e14}
.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65}
/* Editor styling */
.cm-s-neo pre {
padding:0;
}
.cm-s-neo .CodeMirror-gutters {
border:none;
border-right:10px solid transparent;
background-color:transparent;
}
.cm-s-neo .CodeMirror-linenumber {
padding:0;
color:#e0e2e5;
}
.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; }
.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; }
.cm-s-neo div.CodeMirror-cursor {
width: auto;
border: 0;
background: rgba(155,157,162,0.37);
z-index: 1;
}

View File

@@ -1,9 +1,13 @@
/* Loosely based on the Midnight Textmate theme */
.cm-s-night { background: #0a001f; color: #f8f8f8; }
.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; }
.cm-s-night div.CodeMirror-selected { background: #447 !important; }
.cm-s-night .CodeMirror-gutter { background: #0a001f; border-right: 1px solid #aaa; }
.cm-s-night .CodeMirror-gutter-text { color: #f8f8f8; }
.cm-s-night.CodeMirror ::selection { background: rgba(68, 68, 119, .99); }
.cm-s-night.CodeMirror ::-moz-selection { background: rgba(68, 68, 119, .99); }
.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
.cm-s-night .CodeMirror-guttermarker { color: white; }
.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; }
.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }
.cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-night span.cm-comment { color: #6900a1; }
@@ -14,8 +18,11 @@
.cm-s-night span.cm-meta { color: #7678e2; }
.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
.cm-s-night span.cm-error { color: #9d1e15; }
.cm-s-night span.cm-bracket { color: #8da6ce; }
.cm-s-night span.cm-comment { color: #6900a1; }
.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
.cm-s-night span.cm-link { color: #845dc4; }
.cm-s-night span.cm-error { color: #9d1e15; }
.cm-s-night .CodeMirror-activeline-background {background: #1C005A !important;}
.cm-s-night .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}

38
CodeMirror/theme/paraiso-dark.css vendored Normal file
View File

@@ -0,0 +1,38 @@
/*
Name: Paraíso (Dark)
Author: Jan T. Sott
Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)
Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
*/
.cm-s-paraiso-dark.CodeMirror {background: #2f1e2e; color: #b9b6b0;}
.cm-s-paraiso-dark div.CodeMirror-selected {background: #41323f !important;}
.cm-s-paraiso-dark.CodeMirror ::selection { background: rgba(65, 50, 63, .99); }
.cm-s-paraiso-dark.CodeMirror ::-moz-selection { background: rgba(65, 50, 63, .99); }
.cm-s-paraiso-dark .CodeMirror-gutters {background: #2f1e2e; border-right: 0px;}
.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; }
.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; }
.cm-s-paraiso-dark .CodeMirror-linenumber {color: #776e71;}
.cm-s-paraiso-dark .CodeMirror-cursor {border-left: 1px solid #8d8687 !important;}
.cm-s-paraiso-dark span.cm-comment {color: #e96ba8;}
.cm-s-paraiso-dark span.cm-atom {color: #815ba4;}
.cm-s-paraiso-dark span.cm-number {color: #815ba4;}
.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute {color: #48b685;}
.cm-s-paraiso-dark span.cm-keyword {color: #ef6155;}
.cm-s-paraiso-dark span.cm-string {color: #fec418;}
.cm-s-paraiso-dark span.cm-variable {color: #48b685;}
.cm-s-paraiso-dark span.cm-variable-2 {color: #06b6ef;}
.cm-s-paraiso-dark span.cm-def {color: #f99b15;}
.cm-s-paraiso-dark span.cm-bracket {color: #b9b6b0;}
.cm-s-paraiso-dark span.cm-tag {color: #ef6155;}
.cm-s-paraiso-dark span.cm-link {color: #815ba4;}
.cm-s-paraiso-dark span.cm-error {background: #ef6155; color: #8d8687;}
.cm-s-paraiso-dark .CodeMirror-activeline-background {background: #4D344A !important;}
.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}

38
CodeMirror/theme/paraiso-light.css vendored Normal file
View File

@@ -0,0 +1,38 @@
/*
Name: Paraíso (Light)
Author: Jan T. Sott
Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)
Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
*/
.cm-s-paraiso-light.CodeMirror {background: #e7e9db; color: #41323f;}
.cm-s-paraiso-light div.CodeMirror-selected {background: #b9b6b0 !important;}
.cm-s-paraiso-light.CodeMirror ::selection { background: #b9b6b0; }
.cm-s-paraiso-light.CodeMirror ::-moz-selection { background: #b9b6b0; }
.cm-s-paraiso-light .CodeMirror-gutters {background: #e7e9db; border-right: 0px;}
.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; }
.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; }
.cm-s-paraiso-light .CodeMirror-linenumber {color: #8d8687;}
.cm-s-paraiso-light .CodeMirror-cursor {border-left: 1px solid #776e71 !important;}
.cm-s-paraiso-light span.cm-comment {color: #e96ba8;}
.cm-s-paraiso-light span.cm-atom {color: #815ba4;}
.cm-s-paraiso-light span.cm-number {color: #815ba4;}
.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute {color: #48b685;}
.cm-s-paraiso-light span.cm-keyword {color: #ef6155;}
.cm-s-paraiso-light span.cm-string {color: #fec418;}
.cm-s-paraiso-light span.cm-variable {color: #48b685;}
.cm-s-paraiso-light span.cm-variable-2 {color: #06b6ef;}
.cm-s-paraiso-light span.cm-def {color: #f99b15;}
.cm-s-paraiso-light span.cm-bracket {color: #41323f;}
.cm-s-paraiso-light span.cm-tag {color: #ef6155;}
.cm-s-paraiso-light span.cm-link {color: #815ba4;}
.cm-s-paraiso-light span.cm-error {background: #ef6155; color: #776e71;}
.cm-s-paraiso-light .CodeMirror-activeline-background {background: #CFD1C4 !important;}
.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}

53
CodeMirror/theme/pastel-on-dark.css vendored Normal file
View File

@@ -0,0 +1,53 @@
/**
* Pastel On Dark theme ported from ACE editor
* @license MIT
* @copyright AtomicPages LLC 2014
* @author Dennis Thompson, AtomicPages LLC
* @version 1.1
* @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme
*/
.cm-s-pastel-on-dark.CodeMirror {
background: #2c2827;
color: #8F938F;
line-height: 1.5;
font-size: 14px;
}
.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2) !important; }
.cm-s-pastel-on-dark.CodeMirror ::selection { background: rgba(221,240,255,0.2); }
.cm-s-pastel-on-dark.CodeMirror ::-moz-selection { background: rgba(221,240,255,0.2); }
.cm-s-pastel-on-dark .CodeMirror-gutters {
background: #34302f;
border-right: 0px;
padding: 0 3px;
}
.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; }
.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; }
.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; }
.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }
.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; }
.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; }
.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; }
.cm-s-pastel-on-dark span.cm-property { color: #8F938F; }
.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; }
.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; }
.cm-s-pastel-on-dark span.cm-string { color: #66A968; }
.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; }
.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; }
.cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; }
.cm-s-pastel-on-dark span.cm-def { color: #757aD8; }
.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; }
.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; }
.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; }
.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; }
.cm-s-pastel-on-dark span.cm-error {
background: #757aD8;
color: #f8f8f0;
}
.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031) !important; }
.cm-s-pastel-on-dark .CodeMirror-matchingbracket {
border: 1px solid rgba(255,255,255,0.25);
color: #8F938F !important;
margin: -1px -1px 0 -1px;
}

View File

@@ -1,9 +1,11 @@
.cm-s-rubyblue { font:13px/1.4em Trebuchet, Verdana, sans-serif; } /* - customized editor font - */
.cm-s-rubyblue { background: #112435; color: white; }
.cm-s-rubyblue.CodeMirror { background: #112435; color: white; }
.cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; }
.cm-s-rubyblue .CodeMirror-gutter { background: #1F4661; border-right: 7px solid #3E7087; min-width:2.5em; }
.cm-s-rubyblue .CodeMirror-gutter-text { color: white; }
.cm-s-rubyblue.CodeMirror ::selection { background: rgba(56, 86, 111, 0.99); }
.cm-s-rubyblue.CodeMirror ::-moz-selection { background: rgba(56, 86, 111, 0.99); }
.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; }
.cm-s-rubyblue .CodeMirror-guttermarker { color: white; }
.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; }
.cm-s-rubyblue .CodeMirror-linenumber { color: white; }
.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; }
@@ -14,8 +16,10 @@
.cm-s-rubyblue span.cm-meta { color: #F0F; }
.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }
.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; }
.cm-s-rubyblue span.cm-error { color: #AF2018; }
.cm-s-rubyblue span.cm-bracket { color: #F0F; }
.cm-s-rubyblue span.cm-link { color: #F4C20B; }
.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }
.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }
.cm-s-rubyblue span.cm-error { color: #AF2018; }
.cm-s-rubyblue .CodeMirror-activeline-background {background: #173047 !important;}

165
CodeMirror/theme/solarized.css vendored Normal file
View File

@@ -0,0 +1,165 @@
/*
Solarized theme for code-mirror
http://ethanschoonover.com/solarized
*/
/*
Solarized color pallet
http://ethanschoonover.com/solarized/img/solarized-palette.png
*/
.solarized.base03 { color: #002b36; }
.solarized.base02 { color: #073642; }
.solarized.base01 { color: #586e75; }
.solarized.base00 { color: #657b83; }
.solarized.base0 { color: #839496; }
.solarized.base1 { color: #93a1a1; }
.solarized.base2 { color: #eee8d5; }
.solarized.base3 { color: #fdf6e3; }
.solarized.solar-yellow { color: #b58900; }
.solarized.solar-orange { color: #cb4b16; }
.solarized.solar-red { color: #dc322f; }
.solarized.solar-magenta { color: #d33682; }
.solarized.solar-violet { color: #6c71c4; }
.solarized.solar-blue { color: #268bd2; }
.solarized.solar-cyan { color: #2aa198; }
.solarized.solar-green { color: #859900; }
/* Color scheme for code-mirror */
.cm-s-solarized {
line-height: 1.45em;
color-profile: sRGB;
rendering-intent: auto;
}
.cm-s-solarized.cm-s-dark {
color: #839496;
background-color: #002b36;
text-shadow: #002b36 0 1px;
}
.cm-s-solarized.cm-s-light {
background-color: #fdf6e3;
color: #657b83;
text-shadow: #eee8d5 0 1px;
}
.cm-s-solarized .CodeMirror-widget {
text-shadow: none;
}
.cm-s-solarized .cm-keyword { color: #cb4b16 }
.cm-s-solarized .cm-atom { color: #d33682; }
.cm-s-solarized .cm-number { color: #d33682; }
.cm-s-solarized .cm-def { color: #2aa198; }
.cm-s-solarized .cm-variable { color: #839496; }
.cm-s-solarized .cm-variable-2 { color: #b58900; }
.cm-s-solarized .cm-variable-3 { color: #6c71c4; }
.cm-s-solarized .cm-property { color: #2aa198; }
.cm-s-solarized .cm-operator {color: #6c71c4;}
.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; }
.cm-s-solarized .cm-string { color: #859900; }
.cm-s-solarized .cm-string-2 { color: #b58900; }
.cm-s-solarized .cm-meta { color: #859900; }
.cm-s-solarized .cm-qualifier { color: #b58900; }
.cm-s-solarized .cm-builtin { color: #d33682; }
.cm-s-solarized .cm-bracket { color: #cb4b16; }
.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; }
.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; }
.cm-s-solarized .cm-tag { color: #93a1a1 }
.cm-s-solarized .cm-attribute { color: #2aa198; }
.cm-s-solarized .cm-header { color: #586e75; }
.cm-s-solarized .cm-quote { color: #93a1a1; }
.cm-s-solarized .cm-hr {
color: transparent;
border-top: 1px solid #586e75;
display: block;
}
.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; }
.cm-s-solarized .cm-special { color: #6c71c4; }
.cm-s-solarized .cm-em {
color: #999;
text-decoration: underline;
text-decoration-style: dotted;
}
.cm-s-solarized .cm-strong { color: #eee; }
.cm-s-solarized .cm-error,
.cm-s-solarized .cm-invalidchar {
color: #586e75;
border-bottom: 1px dotted #dc322f;
}
.cm-s-solarized.cm-s-dark .CodeMirror-selected { background: #073642; }
.cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); }
.cm-s-solarized.cm-s-dark.CodeMirror ::-moz-selection { background: rgba(7, 54, 66, 0.99); }
.cm-s-solarized.cm-s-light .CodeMirror-selected { background: #eee8d5; }
.cm-s-solarized.cm-s-light.CodeMirror ::selection { background: #eee8d5; }
.cm-s-solarized.cm-s-lightCodeMirror ::-moz-selection { background: #eee8d5; }
/* Editor styling */
/* Little shadow on the view-port of the buffer view */
.cm-s-solarized.CodeMirror {
-moz-box-shadow: inset 7px 0 12px -6px #000;
-webkit-box-shadow: inset 7px 0 12px -6px #000;
box-shadow: inset 7px 0 12px -6px #000;
}
/* Gutter border and some shadow from it */
.cm-s-solarized .CodeMirror-gutters {
border-right: 1px solid;
}
/* Gutter colors and line number styling based of color scheme (dark / light) */
/* Dark */
.cm-s-solarized.cm-s-dark .CodeMirror-gutters {
background-color: #002b36;
border-color: #00232c;
}
.cm-s-solarized.cm-s-dark .CodeMirror-linenumber {
text-shadow: #021014 0 -1px;
}
/* Light */
.cm-s-solarized.cm-s-light .CodeMirror-gutters {
background-color: #fdf6e3;
border-color: #eee8d5;
}
/* Common */
.cm-s-solarized .CodeMirror-linenumber {
color: #586e75;
padding: 0 5px;
}
.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; }
.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; }
.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; }
.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text {
color: #586e75;
}
.cm-s-solarized .CodeMirror-lines .CodeMirror-cursor {
border-left: 1px solid #819090;
}
/*
Active line. Negative margin compensates left padding of the text in the
view-port
*/
.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background {
background: rgba(255, 255, 255, 0.10);
}
.cm-s-solarized.cm-s-light .CodeMirror-activeline-background {
background: rgba(0, 0, 0, 0.10);
}

30
CodeMirror/theme/the-matrix.css vendored Normal file
View File

@@ -0,0 +1,30 @@
.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; }
.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D !important; }
.cm-s-the-matrix.CodeMirror ::selection { background: rgba(45, 45, 45, 0.99); }
.cm-s-the-matrix.CodeMirror ::-moz-selection { background: rgba(45, 45, 45, 0.99); }
.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; }
.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; }
.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; }
.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; }
.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00 !important; }
.cm-s-the-matrix span.cm-keyword {color: #008803; font-weight: bold;}
.cm-s-the-matrix span.cm-atom {color: #3FF;}
.cm-s-the-matrix span.cm-number {color: #FFB94F;}
.cm-s-the-matrix span.cm-def {color: #99C;}
.cm-s-the-matrix span.cm-variable {color: #F6C;}
.cm-s-the-matrix span.cm-variable-2 {color: #C6F;}
.cm-s-the-matrix span.cm-variable-3 {color: #96F;}
.cm-s-the-matrix span.cm-property {color: #62FFA0;}
.cm-s-the-matrix span.cm-operator {color: #999}
.cm-s-the-matrix span.cm-comment {color: #CCCCCC;}
.cm-s-the-matrix span.cm-string {color: #39C;}
.cm-s-the-matrix span.cm-meta {color: #C9F;}
.cm-s-the-matrix span.cm-qualifier {color: #FFF700;}
.cm-s-the-matrix span.cm-builtin {color: #30a;}
.cm-s-the-matrix span.cm-bracket {color: #cc7;}
.cm-s-the-matrix span.cm-tag {color: #FFBD40;}
.cm-s-the-matrix span.cm-attribute {color: #FFF700;}
.cm-s-the-matrix span.cm-error {color: #FF0000;}
.cm-s-the-matrix .CodeMirror-activeline-background {background: #040;}

View File

@@ -0,0 +1,35 @@
/*
Name: Tomorrow Night - Bright
Author: Chris Kempson
Port done by Gerard Braad <me@gbraad.nl>
*/
.cm-s-tomorrow-night-bright.CodeMirror {background: #000000; color: #eaeaea;}
.cm-s-tomorrow-night-bright div.CodeMirror-selected {background: #424242 !important;}
.cm-s-tomorrow-night-bright .CodeMirror-gutters {background: #000000; border-right: 0px;}
.cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; }
.cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; }
.cm-s-tomorrow-night-bright .CodeMirror-linenumber {color: #424242;}
.cm-s-tomorrow-night-bright .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;}
.cm-s-tomorrow-night-bright span.cm-comment {color: #d27b53;}
.cm-s-tomorrow-night-bright span.cm-atom {color: #a16a94;}
.cm-s-tomorrow-night-bright span.cm-number {color: #a16a94;}
.cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute {color: #99cc99;}
.cm-s-tomorrow-night-bright span.cm-keyword {color: #d54e53;}
.cm-s-tomorrow-night-bright span.cm-string {color: #e7c547;}
.cm-s-tomorrow-night-bright span.cm-variable {color: #b9ca4a;}
.cm-s-tomorrow-night-bright span.cm-variable-2 {color: #7aa6da;}
.cm-s-tomorrow-night-bright span.cm-def {color: #e78c45;}
.cm-s-tomorrow-night-bright span.cm-bracket {color: #eaeaea;}
.cm-s-tomorrow-night-bright span.cm-tag {color: #d54e53;}
.cm-s-tomorrow-night-bright span.cm-link {color: #a16a94;}
.cm-s-tomorrow-night-bright span.cm-error {background: #d54e53; color: #6A6A6A;}
.cm-s-tomorrow-night-bright .CodeMirror-activeline-background {background: #2a2a2a !important;}
.cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}

View File

@@ -0,0 +1,38 @@
/*
Name: Tomorrow Night - Eighties
Author: Chris Kempson
CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
*/
.cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;}
.cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;}
.cm-s-tomorrow-night-eighties.CodeMirror ::selection { background: rgba(45, 45, 45, 0.99); }
.cm-s-tomorrow-night-eighties.CodeMirror ::-moz-selection { background: rgba(45, 45, 45, 0.99); }
.cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;}
.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; }
.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; }
.cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;}
.cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;}
.cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;}
.cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;}
.cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;}
.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;}
.cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;}
.cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;}
.cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;}
.cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;}
.cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;}
.cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;}
.cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;}
.cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;}
.cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;}
.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background {background: #343600 !important;}
.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}

32
CodeMirror/theme/twilight.css vendored Normal file
View File

@@ -0,0 +1,32 @@
.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/
.cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/
.cm-s-twilight.CodeMirror ::selection { background: rgba(50, 50, 50, 0.99); }
.cm-s-twilight.CodeMirror ::-moz-selection { background: rgba(50, 50, 50, 0.99); }
.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; }
.cm-s-twilight .CodeMirror-guttermarker { color: white; }
.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; }
.cm-s-twilight .CodeMirror-linenumber { color: #aaa; }
.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-twilight .cm-keyword { color: #f9ee98; } /**/
.cm-s-twilight .cm-atom { color: #FC0; }
.cm-s-twilight .cm-number { color: #ca7841; } /**/
.cm-s-twilight .cm-def { color: #8DA6CE; }
.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/
.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/
.cm-s-twilight .cm-operator { color: #cda869; } /**/
.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/
.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/
.cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/
.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/
.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/
.cm-s-twilight .cm-tag { color: #997643; } /**/
.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/
.cm-s-twilight .cm-header { color: #FF6400; }
.cm-s-twilight .cm-hr { color: #AEAEAE; }
.cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/
.cm-s-twilight .cm-error { border-bottom: 1px solid red; }
.cm-s-twilight .CodeMirror-activeline-background {background: #27282E !important;}
.cm-s-twilight .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}

View File

@@ -1,27 +1,34 @@
/* Taken from the popular Visual Studio Vibrant Ink Schema */
.cm-s-vibrant-ink { background: black; color: white; }
.cm-s-vibrant-ink.CodeMirror { background: black; color: white; }
.cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; }
.cm-s-vibrant-ink.CodeMirror ::selection { background: rgba(53, 73, 60, 0.99); }
.cm-s-vibrant-ink.CodeMirror ::-moz-selection { background: rgba(53, 73, 60, 0.99); }
.cm-s-vibrant-ink .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
.cm-s-vibrant-ink .CodeMirror-gutter-text { color: #d0d0d0; }
.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; }
.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; }
.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-vibrant-ink .cm-keyword { color: #CC7832; }
.cm-s-vibrant-ink .cm-atom { color: #FC0; }
.cm-s-vibrant-ink .cm-number { color: #FFEE98; }
.cm-s-vibrant-ink .cm-def { color: #8DA6CE; }
.cm-s-vibrant-ink span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #FFC66D }
.cm-s-vibrant-ink span.cm-variable-3, .cm-s-cobalt span.cm-def { color: #FFC66D }
.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D }
.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D }
.cm-s-vibrant-ink .cm-operator { color: #888; }
.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; }
.cm-s-vibrant-ink .cm-string { color: #A5C25C }
.cm-s-vibrant-ink .cm-string-2 { color: red }
.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; }
.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; }
.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; }
.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; }
.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; }
.cm-s-vibrant-ink .cm-header { color: #FF6400; }
.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; }
.cm-s-vibrant-ink .cm-link { color: blue; }
.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; }
.cm-s-vibrant-ink .CodeMirror-activeline-background {background: #27282E !important;}
.cm-s-vibrant-ink .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}

53
CodeMirror/theme/xq-dark.css vendored Normal file
View File

@@ -0,0 +1,53 @@
/*
Copyright (C) 2011 by MarkLogic Corporation
Author: Mike Brevoort <mike@brevoort.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; }
.cm-s-xq-dark .CodeMirror-selected { background: #27007A !important; }
.cm-s-xq-dark.CodeMirror ::selection { background: rgba(39, 0, 122, 0.99); }
.cm-s-xq-dark.CodeMirror ::-moz-selection { background: rgba(39, 0, 122, 0.99); }
.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; }
.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; }
.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; }
.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-xq-dark span.cm-keyword {color: #FFBD40;}
.cm-s-xq-dark span.cm-atom {color: #6C8CD5;}
.cm-s-xq-dark span.cm-number {color: #164;}
.cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;}
.cm-s-xq-dark span.cm-variable {color: #FFF;}
.cm-s-xq-dark span.cm-variable-2 {color: #EEE;}
.cm-s-xq-dark span.cm-variable-3 {color: #DDD;}
.cm-s-xq-dark span.cm-property {}
.cm-s-xq-dark span.cm-operator {}
.cm-s-xq-dark span.cm-comment {color: gray;}
.cm-s-xq-dark span.cm-string {color: #9FEE00;}
.cm-s-xq-dark span.cm-meta {color: yellow;}
.cm-s-xq-dark span.cm-qualifier {color: #FFF700;}
.cm-s-xq-dark span.cm-builtin {color: #30a;}
.cm-s-xq-dark span.cm-bracket {color: #cc7;}
.cm-s-xq-dark span.cm-tag {color: #FFBD40;}
.cm-s-xq-dark span.cm-attribute {color: #FFF700;}
.cm-s-xq-dark span.cm-error {color: #f00;}
.cm-s-xq-dark .CodeMirror-activeline-background {background: #27282E !important;}
.cm-s-xq-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}

43
CodeMirror/theme/xq-light.css vendored Normal file
View File

@@ -0,0 +1,43 @@
/*
Copyright (C) 2011 by MarkLogic Corporation
Author: Mike Brevoort <mike@brevoort.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
.cm-s-xq-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; }
.cm-s-xq-light span.cm-atom {color: #6C8CD5;}
.cm-s-xq-light span.cm-number {color: #164;}
.cm-s-xq-light span.cm-def {text-decoration:underline;}
.cm-s-xq-light span.cm-variable {color: black; }
.cm-s-xq-light span.cm-variable-2 {color:black;}
.cm-s-xq-light span.cm-variable-3 {color: black; }
.cm-s-xq-light span.cm-property {}
.cm-s-xq-light span.cm-operator {}
.cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;}
.cm-s-xq-light span.cm-string {color: red;}
.cm-s-xq-light span.cm-meta {color: yellow;}
.cm-s-xq-light span.cm-qualifier {color: grey}
.cm-s-xq-light span.cm-builtin {color: #7EA656;}
.cm-s-xq-light span.cm-bracket {color: #cc7;}
.cm-s-xq-light span.cm-tag {color: #3F7F7F;}
.cm-s-xq-light span.cm-attribute {color: #7F007F;}
.cm-s-xq-light span.cm-error {color: #f00;}
.cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;}
.cm-s-xq-light .CodeMirror-matchingbracket {outline:1px solid grey;color:black !important;background:yellow;}

37
CodeMirror/theme/zenburn.css vendored Normal file
View File

@@ -0,0 +1,37 @@
/**
* "
* Using Zenburn color palette from the Emacs Zenburn Theme
* https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el
*
* Also using parts of https://github.com/xavi/coderay-lighttable-theme
* "
* From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css
*/
.cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; }
.cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; }
.cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white !important; }
.cm-s-zenburn { background-color: #3f3f3f; color: #dcdccc; }
.cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; }
.cm-s-zenburn span.cm-comment { color: #7f9f7f; }
.cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; }
.cm-s-zenburn span.cm-atom { color: #bfebbf; }
.cm-s-zenburn span.cm-def { color: #dcdccc; }
.cm-s-zenburn span.cm-variable { color: #dfaf8f; }
.cm-s-zenburn span.cm-variable-2 { color: #dcdccc; }
.cm-s-zenburn span.cm-string { color: #cc9393; }
.cm-s-zenburn span.cm-string-2 { color: #cc9393; }
.cm-s-zenburn span.cm-number { color: #dcdccc; }
.cm-s-zenburn span.cm-tag { color: #93e0e3; }
.cm-s-zenburn span.cm-property { color: #dfaf8f; }
.cm-s-zenburn span.cm-attribute { color: #dfaf8f; }
.cm-s-zenburn span.cm-qualifier { color: #7cb8bb; }
.cm-s-zenburn span.cm-meta { color: #f0dfaf; }
.cm-s-zenburn span.cm-header { color: #f0efd0; }
.cm-s-zenburn span.cm-operator { color: #f0efd0; }
.cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; }
.cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; }
.cm-s-zenburn .CodeMirror-activeline { background: #000000; }
.cm-s-zenburn .CodeMirror-activeline-background { background: #000000; }
.cm-s-zenburn .CodeMirror-selected { background: #545454; }
.cm-s-zenburn .CodeMirror-focused .CodeMirror-selected { background: #4f4f4f; }

View File

@@ -1,7 +1,7 @@
Copyright (C) 2012 Matt Pass
Website: mattpass.com
Email: matt@mattpass.com
Twitter: @mattpass
Copyright: © 2015 ICEcoder Ltd
Website: icecoder.net
Email: info@icecoder.net
Twitter: @icecoder
#ICEcoder License
##Standard Open Source Initiative MIT License

View File

@@ -1,68 +1,37 @@
#ICEcoder
##Web based IDE for smart web development
##Web IDE / browser code editor awesomeness
Early version of the web based IDE which allows for creation of websites in the web browser. Uses the brilliant CodeMirror for code highlighting & editing, with a slick IDE wrapped around it to make the whole thing work.
ICEcoder is a web IDE / browser based code editor, which allows you to develop websites directly within the web browser. It uses the brilliant CodeMirror for code highlighting & editing, with a slick IDE wrapped around it to make the whole thing work.
<img src="http://icecoder.net/images/ice-coder-web-ide.jpg" alt="ICEcoder web IDE">
<img src="https://icecoder.net/images/icecoder-v5-1-browser-code-editor.png" alt="ICEcoder web IDE">
###Features you'd expect
* Context aware code highlighting
* Supports HTML, CSS, LESS, JavaScript, CoffeeScript, PHP & Ruby
* Smart tab key system (selected text indents line)
* File manager
* Find & replace/replace all
* Document tabs indicate current doc & changes made
* Code folding
* Open last files on load
* Web based, access from anywhere
* Free, open source & customisable
###Cool features you wouldn't expect
* Find & replace in current doc, open docs, files & filenames
* Found match & current position counter
* Indicates content type cursor is on
* Account login to keep certain files secure
* Restrict files, ban files and restrict by IP
* Settings to change functionality & editor theme
* Code Assist system
* Displays nest position of text cursor, hover to select, click to set cursor
* Nest structure OK/broken indicator
* Highlight word and press CTRL+I to Google search that
* Adds end tags as you type and in a context aware way
* Can rename open files (whoaah!)
* CTRL+Enter open current webpage in new tab
* CTRL+S+Enter opens a sticky tab to show live edits
* ESC = Comment/Uncomment line, incl partial lines
* Image viewer
* Colour preview block on CSS colours, ie red, #f00 or RGBA(255,0,0,0.5)
* MySQL Database management via Adminer plugin
* Backs up files every 10 mins or on click of backup plugin icon
* Github repo syncing with ICErepo plugin
###Requirements
You can run ICEcoder either online or locally, on Linux, Windows or Mac based platforms. The only requirement is to have PHP 5 available (5.3 recommended). You can have this either as a vanilla installation or via a program such as WAMP or XAMPP (for Windows) or MAMP (for Mac).
###Installation
####Step 1: Clone the repo
####Step 1: Get ICEcoder
Either download the zip or clone from Github using:
```
$ git clone git@github:mattpass/ICEcoder
$ git clone git://github.com/mattpass/ICEcoder
```
####Step 2: Upload the files (Linux or Windows hosting OK)
```
Upload to a new sub-dir URL such as yourdomain.com/_coder
Set public write permissions on the backups folder and lib/config.php file
```
####Step 2: Place in your document root (online or local)
* Put in a new sub-dir URL such as yourdomain.com/ICEcoder or localhost/ICEcoder
* Set write permissions (757 or 775 depending on your system) on the 'backups', 'lib', 'plugins', 'test' and 'tmp' folders
*(Note: A small number of web servers give an internal server error here, if you get this, try 755 instead)*
####Step 3: Start coding
```
Visit the sub-dir URL in your browser and enter a password
Now you're setup, auto-logged in and ready to code!
```
* Visit the sub-dir URL in your browser and enter a password
**Now you're setup, auto-logged in and ready to code!**
Suitable for commercial & non-commercial projects, just let me know if it's useful to you and any cool customisations you make to it. I take no responsibility for anything, your usage is all down to you.
Is fully open source and I'd encourage you to take it, make it your own and customise to your hearts content! :)
It's fully open source and MIT licensed. I'm happy for you to take it, make it your own and customise to your hearts content and/or contribute to this main repo! :)
Plenty of comments included in the code to assist with understanding, customising etc.
Comments, improvements & feedback welcomed!
Comments, improvements & feedback welcomed!

4
backups/index.php Normal file
View File

@@ -0,0 +1,4 @@
<?php
header("Location: ../");
die();
?>

View File

@@ -1 +0,0 @@
Zip It! backups are stored in this folder

View File

@@ -1,78 +1,152 @@
<?php include("lib/settings.php");?>
<?php
include("lib/headers.php");
include("lib/settings.php");
$t = $text['editor'];
?>
<!DOCTYPE html>
<html style="margin: 0" onMouseDown="top.ICEcoder.mouseDown=true" onMouseUp="top.ICEcoder.mouseDown=false" onMouseMove="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'editor');top.ICEcoder.canResizeFilesW()}">
<html style="margin: 0" onMouseDown="top.ICEcoder.mouseDown=true" onMouseUp="top.ICEcoder.mouseDown=false; if (!top.ICEcoder.overCloseLink) {top.ICEcoder.tabDragEnd()}" onMouseMove="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'editor');top.ICEcoder.canResizeFilesW()}" onDrop="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'editor')}">
<head>
<title>ICEcoder v <?php echo $ICEcoder["versionNo"];?> editor</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="<?php echo $ICEcoder["codeMirrorDir"]; ?>/lib/codemirror.css">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" href="<?php echo $ICEcoder["codeMirrorDir"]; ?>/lib/codemirror.css?microtime=<?php echo microtime(true);?>">
<link rel="stylesheet" href="<?php echo $ICEcoder["codeMirrorDir"]; ?>/addon/hint/show-hint.css?microtime=<?php echo microtime(true);?>">
<link rel="stylesheet" href="<?php echo $ICEcoder["codeMirrorDir"]; ?>/addon/lint/lint.css?microtime=<?php echo microtime(true);?>">
<!--
codemirror-compressed.js
incls: codemirror.js
modes: clike, coffeescript, css, javascript, less, php, ruby & xml
utils: foldcode, searchcursor, match-highlighter
incls: codemirror
modes: clike, coffeescript, css, erlang, go, htmlmixed, javascript, julia, lua, markdown, perl, php, python, ruby, rust, sass, sql, xml, yaml
addon: brace-fold, closebrackets, closetag, css-hint, html-hint, javascript-hint, javascript-lint, lint, match-highlighter, searchcursor, show-hint, sql-hint, trailingspace, xml-fold, xml-hint
//-->
<script src="<?php echo $ICEcoder["codeMirrorDir"]; ?>/lib/codemirror-compressed.js"></script>
<script src="<?php echo $ICEcoder["codeMirrorDir"]; ?>/lib/codemirror-compressed.js?microtime=<?php echo microtime(true);?>"></script>
<?php
if (file_exists(dirname(__FILE__)."/plugins/jshint/jshint-2.5.6.min.js")) {
echo '<script src="plugins/jshint/jshint-2.5.6.min.js?microtime='.microtime(true).'></script>';
};?>
<script src="lib/mmd.js?microtime=<?php echo microtime(true);?>"></script>
<script src="lib/foldcode.js?microtime=<?php echo microtime(true);?>"></script>
<?php
if (file_exists(dirname(__FILE__)."/plugins/emmet/emmet.min.js")) {
echo '<script src="plugins/emmet/emmet.min.js?microtime='.microtime(true).'"></script>';
};?>
<?php
if (file_exists(dirname(__FILE__)."/plugins/pesticide/pesticide.js")) {
echo '<script src="plugins/pesticide/pesticide.js?microtime='.microtime(true).'"></script>';
};?>
<?php
if (file_exists(dirname(__FILE__)."/plugins/stats.js/stats.min.js")) {
echo '<script src="plugins/stats.js/stats.min.js?microtime='.microtime(true).'"></script>';
};?>
<link rel="stylesheet" href="<?php
if ($ICEcoder["theme"]=="default") {echo 'lib/editor.css';} else {echo $ICEcoder["codeMirrorDir"].'/theme/'.$ICEcoder["theme"].'.css';};
$activeLineBG = $ICEcoder["theme"]=="eclipse" || $ICEcoder["theme"]=="elegant" || $ICEcoder["theme"]=="neat" ? "#ccc" : "#000";
echo "?microtime=".microtime(true);
if (array_search($ICEcoder["theme"],array("3024-day","base16-light","eclipse","elegant","mdn-like","neat","neo","paraiso-light","solarized","the-matrix","xq-light")) !== false) {
$activeLineBG = "#ccc";
} elseif (array_search($ICEcoder["theme"],array("3024-night","blackboard","colorforth","liquibyte","night","tomorrow-night-bright","tomorrow-night-eighties","vibrant-ink")) !== false) {
$activeLineBG = "#888";
} else {
$activeLineBG = "#000";
}
?>">
<style type="text/css">
.CodeMirror {position: absolute; width: 0; background-color: #fff; color: #000; top: 0px; width: 100%; z-index: 1}
.CodeMirror-scroll {height: auto; overflow: visible}
/* Make sure this next one remains the 1st item, updated with JS */
.CodeMirror {position: absolute; top: 0; width: 100%; font-size: <?php echo $ICEcoder["fontSize"];?>; z-index: 1}
.CodeMirror-scroll {} /* was: height: auto; overflow: visible */
/* Make sure this next one remains the 3rd item, updated with JS */
.cm-s-activeLine {background: <?php echo $activeLineBG;?> !important}
span.CodeMirror-matchhighlight {background: #555}
.CodeMirror-focused span.CodeMirror-matchhighlight {color: #000; background: #555; !important}
/* Make sure this next one remains the 6th item, updated with JS */
.cm-tab:after {position: relative; display: inline-block; width: 0; left: -1.4em; overflow: visible; color: #aaa; content: "<?php if($ICEcoder["visibleTabs"]) {echo '\\21e5';};?>";}
.cm-matchhighlight, .CodeMirror-focused .cm-matchhighlight {color: #fff !important; background: #06c !important}
/* Make sure this next one remains the 5th item, updated with JS */
.cm-tab {border-left-width: <?php echo $ICEcoder["visibleTabs"] ? "1px" : "0";?>; margin-left: <?php echo $ICEcoder["visibleTabs"] ? "-1px" : "0";?>; border-left-style: solid; border-left-color: rgba(255,255,255,0.15)}
.cm-trailingspace {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==);
background-position: bottom left;
background-repeat: repeat-x;
}
.CodeMirror-foldmarker {font-family: arial; line-height: .3; color: #b00; cursor: pointer;
text-shadow: #fff 1px 1px 2px, #fff -1px -1px 2px, #fff 1px -1px 2px, #fff -1px 1px 2px;
}
.folds {display: inline-block; width: 13px}
.fold {position: absolute; display: inline-block; width: 13px; height: 13px; font-size: 14px; text-align: center; cursor: pointer}
.foldOn {background: #800; color: #ddd}
.foldOff {background: rgba(255,255,255,0.04); color: #666}
h2 {color: rgba(0,198,255,0.7)}
.heading {color:#888}
.cm-s-diff {left: 50%}
.diffGreen {background: #0b0 !important; color: #000 !important}
.diffRed {background: #800 !important; color: #fff !important}
.diffGrey {background: #444 !important; color: #fff !important}
.diffGreyLighter {background: #888 !important; color: #222 !important}
.diffNone {}
.info {font-size: 10px; color: rgba(0,198,255,0.7); cursor: help}
.trialBarContainer {display: inline-block; width: 170px; height: 8px; background: #0b0b0b; margin-bottom: 40px}
.trialBarRemaining {display: inline-block; width: 170px; height: 8px; background: rgba(0,198,255,0.7); box-shadow: 0 0 10px 1px rgba(0,198,255,0.5);
transition: width 0.7s ease-in-out;
}
.trialBarText {margin-top: 6px; color: #888}
.trialBarText a {color: #fff; text-decoration: none}
</style>
<link rel="stylesheet" href="lib/file-types.css?microtime=<?php echo microtime(true);?>">
<link rel="stylesheet" href="lib/file-type-icons.css?microtime=<?php echo microtime(true);?>">
</head>
<body onLoad="top.ICEcoder.updateFileFolderCount()" style="color: #fff; margin: 0" onKeyDown="return top.ICEcoder.interceptKeys('content', event);" onKeyUp="top.ICEcoder.resetKeys(event);">
<body style="color: #fff; margin: 0" onKeyDown="return top.ICEcoder.interceptKeys('content', event);" onKeyUp="top.ICEcoder.resetKeys(event);" onBlur="parent.ICEcoder.resetKeys(event);" onload="if (document.getElementById('trialBarRemaining')) {setTimeout(function(){document.getElementById('trialBarRemaining').style.width = '<?php echo $tRemainingPerc*170;?>px';},150)}">
<div style="margin: 32px 43px; font-family: arial; font-size: 10px; color: #ddd">
<div style="float: left; margin-right: 50px">
<h2 style="color: rgba(0,198,255,0.7)">server</h2>
<span style="color:#888">Server name, OS & IP:</span><br>
<?php echo $_SERVER['SERVER_NAME']." &nbsp;&nbsp ".$_SERVER['SERVER_SOFTWARE']." &nbsp;&nbsp ".$_SERVER['SERVER_ADDR'];?><br><br>
<span style="color:#888">Root:</span><br>
<div style="display: none; margin: 32px 43px 0 43px; padding: 10px; width: 500px; font-family: arial; font-size: 10px; color: #ddd; background: #333" id="dataMessage"></div>
<div style="margin: 20px 43px 32px 43px; font-family: arial; font-size: 10px; color: #ddd">
<div style="float: left; width: 300px; margin-right: 50px">
<h2><?php echo $t['server'];?></h2>
<span class="heading"><?php echo $t['Server name, OS...'];?></span><br>
<?php echo $_SERVER['SERVER_NAME']." &nbsp;&nbsp ".$_SERVER['SERVER_SOFTWARE']." &nbsp;&nbsp ".(isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:"Unknown");?><br><br>
<span class="heading"><?php echo $t['Root'];?></span><br>
<?php echo $docRoot;?><br><br>
<span style="color:#888">ICEcoder root:</span><br>
<?php echo $docRoot.$ICEcoder['root'];?><br><br>
<span style="color:#888">PHP version:</span><br>
<span class="heading"><?php echo $t['ICEcoder root'];?></span><br>
<?php echo $docRoot.$iceRoot;?><br><br>
<span class="heading"><?php echo $t['PHP version'];?></span><br>
<?php echo phpversion();?><br><br>
<span style="color:#888">Date & time:</span><br>
<span id="serverDT"></span><br><br><br>
<span class="heading"><?php echo $t['Date & time'];?></span><br>
<span id="serverDT"></span><br><br>
<h2><?php echo $t['your device'];?></h2>
<span class="heading"><?php echo $t['Browser'];?></span><br>
<?php echo xssClean($_SERVER['HTTP_USER_AGENT'],"html");?><br><br>
<span class="heading"><?php echo $t['Your IP'];?></span><br>
<?php echo $_SERVER['REMOTE_ADDR'];?><br><br>
</div>
<div style="float: left">
<h2 style="color: rgba(0,198,255,0.7)">files</h2>
<span style="color:#888">Last 10 files opened:</span><br>
<?php
// No valid license code - show the trial remaining bar
if (generateHash(strClean($ICEcoder['licenseEmail']),$ICEcoder['licenseCode'])!=$ICEcoder['licenseCode']) {?>
<h2><?php echo $t['trial remaining'];?></h2>
<div class="trialBarContainer"><div class="trialBarRemaining" id="trialBarRemaining"></div><br>
<div class="trialBarText"><?php echo $tDaysRemaining;?> <?php echo $t['days left'];?> - <a href="lib/login.php?get=code&csrf=<?php echo $_SESSION["csrf"];?>" target="_parent">Unlock now</a></div>
</div>
<?php ;}; ?>
<h2><?php echo $t['files'];?></h2>
<span class="heading"><?php echo $t['Last 10 files...'];?></span><br>
<ul class="fileManager" id="last10Files" style="margin-left: 0; line-height: 20px"><?php
$last10FilesArray = explode(",",$ICEcoder["last10Files"]);
for ($i=0;$i<count($last10FilesArray);$i++) {
if ($ICEcoder["last10Files"]=="") {
echo '[none]<br><br>';
echo '<div style="display: inline-block; margin-left: -39px; margin-top: -4px">'.$t['none'].'</div><br><br>';
} else {
echo '<a style="cursor:pointer" onClick="top.ICEcoder.openFile(\''.str_replace("|","/",$last10FilesArray[$i]).'\')">';
$fileFolderName = str_replace("\\","/",$last10FilesArray[$i]);
// Get extension (prefix 'ext-' to prevent invalid classes from extensions that begin with numbers)
$ext = "ext-".pathinfo($docRoot.$iceRoot.$fileFolderName, PATHINFO_EXTENSION);
echo '<li class="pft-file '.strtolower($ext).'" style="margin-left: -21px">';
echo '<a style="cursor:pointer" onClick="top.ICEcoder.openFile(\''.str_replace($docRoot,"",str_replace("|","/",$last10FilesArray[$i])).'\')">';
echo str_replace($docRoot,"",str_replace("|","/",$last10FilesArray[$i]));
echo '</a><br>'.PHP_EOL;
if ($i==count($last10FilesArray)-1) {echo '<br>'.PHP_EOL;};
echo '</a></li>';
if ($i<count($last10FilesArray)-1) {echo PHP_EOL;};
}
}
;?>
<span style="color:#888">File & folder count:</span><br>
<div id="fileFolderCounts"></div><br><br><br>
;?></ul>
</div>
<div style="clear: both">
<h2 style="color: rgba(0,198,255,0.7)">your device</h2>
<span style="color:#888">Browser:</span><br>
<?php echo $_SERVER['HTTP_USER_AGENT'];?><br><br>
<span style="color:#888">Your IP:</span><br>
<?php echo $_SERVER['REMOTE_ADDR'];?>
</div>
<div style="clear: both"></div>
<script>
var nDT=<?php echo time()*1000;?>;
setInterval(function(){
@@ -87,110 +161,136 @@ span.CodeMirror-matchhighlight {background: #555}
}
},1000);
</script>
<?php if(is_dir('test') && !$ICEcoder['demoMode']) {?>
<div style="float: left; margin-right: 50px">
<h2><?php echo $t['test suite'];?></h2>
<span class="heading"><?php echo $t['Run unit tests'];?></span><br>
<a nohref onclick="top.ICEcoder.filesFrame.contentWindow.frames['testControl'].location.href = 'test'" style="color: #fff; cursor: pointer"><?php echo $t['Run unit tests'];?></a><div id="unitTestResults"></div>
</div>
<?php
;};
?>
<div style="float: left">
<h2><?php echo $t['dev mode'];?> <?php echo $ICEcoder['devMode'] ? "on" : "off";?></h2>
<span class="heading"><?php echo $t['Status'];?>:</span><br>
<?php echo $t['Using']?> <?php echo $ICEcoder['devMode'] ? "ice-coder.js" : "ice-coder.min.js";?> <a title="<?php echo $t['You can switch...'];?>" class="info">[?]</a>
</div>
<div style="clear: both"></div>
</div>
<script>
function createNewCMInstance(num) {
var fileName = top.ICEcoder.openFiles[top.ICEcoder.selectedTab-1];
top.ICEcoder.foldStyle = '<span style="position: absolute; display: inline-block; width: 13px; height: 13px; left: 0; background-color: #b00; color: #fff; text-align: center; cursor: pointer"><span style="position: relative; left: -1px">+</span></span> %N%';
var codeFoldTag = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder,top.ICEcoder.foldStyle);
var codeFoldBrace = CodeMirror.newFoldFunction(CodeMirror.braceRangeFinder,top.ICEcoder.foldStyle);
window['cM'+num] = CodeMirror(document.body, {
mode: "application/x-httpd-php",
lineNumbers: true,
lineWrapping: true,
indentUnit: top.ICEcoder.tabWidth,
tabSize: top.ICEcoder.tabWidth,
indentWithTabs: true,
electricChars: false,
onCursorActivity: function(thisCM) {
top.ICEcoder.getCaretPosition();
top.ICEcoder.updateCharDisplay();
window['cM'+num].setLineClass(top.ICEcoder['cMActiveLine'+num], null);
if(!window['cM'+num].somethingSelected()) {
top.ICEcoder['cMActiveLine'+num] = window['cM'+num].setLineClass(window['cM'+num].getCursor().line, "cm-s-activeLine");
}
thisCM.matchHighlight("CodeMirror-matchhighlight");
top.ICEcoder.cssColorPreview();
},
onChange: function() {
// If we're not loading the file, it's a change, so update tab
if (!top.ICEcoder.loadingFile) {
top.ICEcoder.changedContent[top.ICEcoder.selectedTab-1] = 1;
top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);
}
top.ICEcoder.getCaretPosition();
top.ICEcoder.dontUpdateNest = false;
top.ICEcoder.updateCharDisplay();
top.ICEcoder.updateNestingIndicator();
if (top.ICEcoder.findMode) {
top.ICEcoder.results.splice(top.ICEcoder.findResult,1);
top.document.getElementById('results').innerHTML = top.ICEcoder.results.length + " results";
top.ICEcoder.findMode = false;
}
},
onKeyEvent: function(thisCM, e) {
top.ICEcoder.redoChangedContent(e);
top.ICEcoder.findReplace('find',true,false);
top.ICEcoder.getCaretPosition();
top.ICEcoder.updateCharDisplay();
tok = thisCM.getTokenAt(thisCM.getCursor());
if (tok.string!=">") {lastString=tok.string};
if (e.type=="keyup"&&e.keyCode=="16"&&lastKeyCode=="190") {
canDoEndTag=true;
if (top.ICEcoder.tagString!="script" && top.ICEcoder.tagNestExceptions.indexOf(top.ICEcoder.tagString)>-1) {
canDoEndTag=false;
}
if (
top.ICEcoder.tagString.slice(0,1)=="/"||
top.ICEcoder.tagString.slice(0,1)=="?"||
!top.ICEcoder.codeAssist||
fileName && (fileName.indexOf(".js")>0||fileName.indexOf(".css")>0||fileName.indexOf(".less")>0)
) {canDoEndTag=false}
contentType = top.ICEcoder.caretLocType;
if (canDoEndTag && (contentType!="JavaScript"||(contentType=="JavaScript"&&top.ICEcoder.tagString=="script"))) {
numTabs = top.ICEcoder.htmlTagArray.length;
if (top.ICEcoder.htmlTagArray[0]=="html") {numTabs--};
tabs = "";
for (i=0;i<numTabs-1;i++) {
tabs += "\t";
}
endTag = "</" + top.ICEcoder.tagString + ">";
if (top.ICEcoder.tagString=="script") {endTag="</"+"script>"};
if(top.ICEcoder.tagString=="title"||top.ICEcoder.tagString=="a"||top.ICEcoder.tagString=="li"||top.ICEcoder.tagString=="span"||(top.ICEcoder.tagString.slice(0,1)=="h"&&parseInt(top.ICEcoder.tagString.slice(1,2),10)>=1&&parseInt(top.ICEcoder.tagString.slice(1,2),10)<=7)) {
thisCM.replaceSelection(endTag);
thisCM.setCursor(thisCM.getCursor().line,thisCM.getCursor().ch-top.ICEcoder.tagString.length-3);
} else if(top.ICEcoder.tagString=="html"||top.ICEcoder.tagString=="head") {
thisCM.replaceSelection("\n\n"+endTag);
thisCM.setCursor(thisCM.getCursor().line-1,numTabs);
} else {
thisCM.replaceSelection("\n"+tabs+"\t\n"+tabs+endTag);
thisCM.setCursor(thisCM.getCursor().line-1,numTabs);
}
}
};
lastKeyCode = e.keyCode;
},
onScroll: function() {
top.ICEcoder.mouseDown=false;
},
onGutterClick: !fileName || (fileName && fileName.indexOf(".js") == -1 && fileName.indexOf(".coffee") == -1 && fileName.indexOf(".php") && fileName.indexOf(".rb") == -1) ? codeFoldTag : codeFoldBrace,
extraKeys: {
"Tab": function(cm) {CodeMirror.commands[top.ICEcoder.tabsIndent ? "defaultTab" : "insertTab"](cm);},
"Shift-Tab": "indentLess",
"Ctrl-Up": function() {},
"Ctrl-Down": function() {}
}
});
// Now create the active line for this CodeMirror object
top.ICEcoder['cMActiveLine'+num] = window['cM'+num].setLineClass(0, "cm-s-activeLine");
CodeMirror.keyMap.ICEcoder = {
"Tab": function(cm) {
return cm.somethingSelected()
? (top.ICEcoder.indentAuto
? cm.execCommand("indentAuto") // Honour our own setting indentAuto
: cm.indentSelection("add") // Add indent (this is default handler in CodeMirror)
)
: CodeMirror.Pass // Falls through to default or Emmet plugin
},
"Shift-Tab": "indentLess",
"Ctrl-Space": "autocomplete",
"Ctrl-Up" : false,
"Ctrl-Down" : false,
"Esc" : false,
fallthrough: ["default"]
};
// CodeMirror does not honor indentWithTabs = false properly when handling Tab key
// Marijn said that it is by design, so we need to make a workaround of our own
(function(){
// let's back up original insertTab function which actually puts
var originalInsertTabFunction = CodeMirror.commands.insertTab;
// and replace it with our own, which branches on whether our ICEcoder.indentWithTabs value is true or false
CodeMirror.commands.insertTab = function(cm){
if (top.ICEcoder.indentWithTabs){
// if it is true, then we should still put there, let's use original function
return originalInsertTabFunction(cm);
} else {
// otherwise - let's call another handler, insertSoftTab which will do the job
return cm.execCommand("insertSoftTab");
}
}
}());
function createNewCMInstance(num) {
// Establish the filename for the tab
var fileName = top.ICEcoder.openFiles[top.ICEcoder.selectedTab-1];
// Define our CodeMirror options
var cMOptions = {
mode: "application/x-httpd-php",
lineNumbers: true,
gutters: ["folds","CodeMirror-lint-markers","CodeMirror-linenumbers"],
lineWrapping: top.ICEcoder.lineWrapping,
indentWithTabs: top.ICEcoder.indentWithTabs,
indentUnit: top.ICEcoder.indentSize,
tabSize: top.ICEcoder.indentSize,
electricChars: false,
autoCloseTags: true,
autoCloseBrackets: true,
highlightSelectionMatches: true,
showTrailingSpace: true,
lint: false,
keyMap: "ICEcoder"
};
// Start editor instances, main and diff
window['cM'+num] = CodeMirror(document.body, cMOptions);
window['cM'+num+'diff'] = CodeMirror(document.body, cMOptions);
// Define actions for those...
// Focus
window['cM'+num] .on("focus", function(thisCM) {top.ICEcoder.cMonFocus(thisCM,'cM'+num)});
window['cM'+num+'diff'] .on("focus", function(thisCM) {top.ICEcoder.cMonFocus(thisCM,'cM'+num+'diff')});
// Blur
window['cM'+num] .on("blur", function(thisCM) {top.ICEcoder.cMonBlur(thisCM,'cM'+num)});
window['cM'+num+'diff'] .on("blur", function(thisCM) {top.ICEcoder.cMonBlur(thisCM,'cM'+num+'diff')});
// Keyup
window['cM'+num] .on("keyup", function(thisCM) {top.ICEcoder.cMonKeyUp(thisCM,'cM'+num)});
window['cM'+num+'diff'] .on("keyup", function(thisCM) {top.ICEcoder.cMonKeyUp(thisCM,'cM'+num+'diff')});
// Cursor activity
window['cM'+num] .on("cursorActivity", function(thisCM) {top.ICEcoder.cMonCursorActivity(thisCM,'cM'+num)});
window['cM'+num+'diff'] .on("cursorActivity", function(thisCM) {top.ICEcoder.cMonCursorActivity(thisCM,'cM'+num+'diff')});
// Before selection change
window['cM'+num] .on("beforeSelectionChange", function(thisCM, changeObj) {top.ICEcoder.prevLine = thisCM.getCursor().line;});
window['cM'+num+'diff'] .on("beforeSelectionChange", function(thisCM, changeObj) {top.ICEcoder.prevLineDiff = thisCM.getCursor().line;});
// Change
window['cM'+num] .on("change", function(thisCM, changeObj) {top.ICEcoder.cMonChange(thisCM,'cM'+num,changeObj)});
window['cM'+num+'diff'] .on("change", function(thisCM, changeObj) {top.ICEcoder.cMonChange(thisCM,'cM'+num+'diff',changeObj)});
// Scroll
window['cM'+num] .on("scroll", function(thisCM) {top.ICEcoder.cMonScroll(thisCM,'cM'+num)});
window['cM'+num+'diff'] .on("scroll", function(thisCM) {top.ICEcoder.cMonScroll(thisCM,'cM'+num+'diff')});
// Gutter click
window['cM'+num] .on("gutterClick", function(thisCM, line, gutter, clickEvent) {CodeMirror.doFold(thisCM.getLine(line).indexOf("{")>-1 ? "brace" : "xml",null,"+","-",false)(thisCM, line);});
window['cM'+num+'diff'] .on("gutterClick", function(thisCM, line, gutter, clickEvent) {CodeMirror.doFold(thisCM.getLine(line).indexOf("{")>-1 ? "brace" : "xml",null,"+","-",false)(thisCM, line);});
// Input read
window['cM'+num] .on("inputRead", function(thisCM) {top.ICEcoder.cMonInputRead(thisCM,'cM'+num)});
window['cM'+num+'diff'] .on("inputRead", function(thisCM) {top.ICEcoder.cMonInputRead(thisCM,'cM'+num+'diff')});
// Render line
window['cM'+num] .on("renderLine", function(thisCM, line, element) {top.ICEcoder.cMonRenderLine(thisCM,'cM'+num,line,element)});
window['cM'+num+'diff'] .on("renderLine", function(thisCM, line, element) {top.ICEcoder.cMonRenderLine(thisCM,'cM'+num+'diff',line,element)});
// Now create the active lines for them
top.ICEcoder['cMActiveLinecM'+num] = window['cM'+num].addLineClass(0, "background", "cm-s-activeLine");
top.ICEcoder['cMActiveLinecM'+num+'diff'] = window['cM'+num+'diff'].addLineClass(0, "background", "cm-s-activeLine");
};
</script>
<div style="position: absolute; display: none; width: 5px; height: 100%; top: 0; right: 0; background: rgba(255,255,255,0.1); overflow: hidden; z-index: 2" id="resultsBar"></div>
<?php include_once("processes/on-editor-load.php"); ?>
</body>
</html>
</html>

49
farbtastic/farbtastic.css Normal file
View File

@@ -0,0 +1,49 @@
.picker {
display: inline-block;
}
.farbtastic {
position: relative;
}
.farbtastic * {
position: absolute;
cursor: crosshair;
}
.farbtastic, .farbtastic .wheel {
width: 195px;
height: 195px;
}
.farbtastic .color, .farbtastic .overlay {
top: 47px;
left: 47px;
width: 101px;
height: 101px;
}
.farbtastic .wheel {
background: url(wheel.png) no-repeat;
width: 195px;
height: 195px;
}
.farbtastic .overlay {
background: url(mask.png) no-repeat;
}
.farbtastic .marker {
width: 17px;
height: 17px;
margin: -8px 0 0 -8px;
overflow: hidden;
background: url(marker.png) no-repeat;
}
.colorValue {
border: 0;
width: 105px;
padding-left: 5px
}
.insertColorValue {
background: #888;
color: #fff;
height: 18px;
width: 60px;
border: 0;
margin-left: 5px;
cursor: pointer
}

253
farbtastic/farbtastic.js Normal file
View File

@@ -0,0 +1,253 @@
/*!
* Farbtastic: NON jQuery color picker plug-in v1.4, based on v1.3u
*
* Licensed under the GPL license:
* http://www.gnu.org/licenses/gpl.html
*/
farbtasticFunc = function (options) {
farbtastic(this, options);
return this;
};
farbtastic = function (container, callback) {
var container = document.getElementById(container);
var callback = document.getElementById(callback);
return container.farbtastic || (container.farbtastic = new _farbtastic(container, callback));
};
_farbtastic = function (container, callback) {
// Store farbtastic object
var fb = this;
// Insert markup
container.innerHTML = '<div class="farbtastic"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>';
fb.wheel = document.getElementsByClassName('wheel')[0];
// Dimensions
fb.radius = 84;
fb.square = 100;
fb.width = 194;
/**
* Link to the given element(s) or callback.
*/
fb.linkTo = function (callback) {
// Unbind previous nodes
if (typeof fb.callback == 'object') {
console.log("Doesn't do anything?");
fb.callback.removeEventListener('keyup', fb.updateValue);
}
// Reset color
fb.color = null;
// Bind callback or elements
if (typeof callback == 'function') {
fb.callback = callback;
}
else if (typeof callback == 'object' || typeof callback == 'string') {
fb.callback = callback;
fb.callback.addEventListener('keyup',fb.updateValue);
if (fb.callback.value) {
fb.setColor(fb.callback.value);
}
}
return this;
};
fb.updateValue = function (event) {
if (this.value && this.value != fb.color) {
fb.setColor(this.value);
}
};
/**
* Change color with HTML syntax #123456
*/
fb.setColor = function (color) {
var unpack = fb.unpack(color);
if (fb.color != color && unpack) {
fb.color = color;
fb.rgb = unpack;
fb.hsl = fb.RGBToHSL(fb.rgb);
fb.updateDisplay();
}
return this;
};
/**
* Change color with HSL triplet [0..1, 0..1, 0..1]
*/
fb.setHSL = function (hsl) {
fb.hsl = hsl;
fb.rgb = fb.HSLToRGB(hsl);
fb.color = fb.pack(fb.rgb);
fb.updateDisplay();
return this;
};
/////////////////////////////////////////////////////
/**
* Retrieve the coordinates of the given event relative to the center
* of the widget.
*/
fb.widgetCoords = function (event) {
return { x: (event.pageX - fb.wheel.offsetParent.offsetLeft) - fb.width / 2, y: (event.pageY - fb.wheel.offsetParent.offsetTop) - fb.width / 2 };
};
/**
* Mousedown handler
*/
fb.mousedown = function (event) {
// Capture mouse
if (!document.dragging) {
document.addEventListener('mousemove', fb.mousemove);
document.addEventListener('mouseup', fb.mouseup);
document.dragging = true;
}
// Check which area is being dragged
var pos = fb.widgetCoords(event);
fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;
// Process
fb.mousemove(event);
return false;
};
/**
* Mousemove handler
*/
fb.mousemove = function (event) {
// Get coordinates relative to color picker center
var pos = fb.widgetCoords(event);
// Set new HSL parameters
if (fb.circleDrag) {
var hue = Math.atan2(pos.x, -pos.y) / 6.28;
if (hue < 0) hue += 1;
fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
}
else {
var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
fb.setHSL([fb.hsl[0], sat, lum]);
}
return false;
};
/**
* Mouseup handler
*/
fb.mouseup = function () {
// Uncapture mouse
document.removeEventListener('mousemove', fb.mousemove);
document.removeEventListener('mouseup', fb.mouseup);
document.dragging = false;
};
/**
* Update the markers and styles
*/
fb.updateDisplay = function () {
// Markers
var angle = fb.hsl[0] * 6.28;
document.getElementsByClassName('h-marker')[0].style.left = Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px';
document.getElementsByClassName('h-marker')[0].style.top = Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px';
document.getElementsByClassName('sl-marker')[0].style.left = Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px';
document.getElementsByClassName('sl-marker')[0].style.top = Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px';
// Saturation/Luminance gradient
document.getElementsByClassName('color')[0].style.backgroundColor = fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5]));
// Linked elements or callback
if (typeof fb.callback == 'object') {
// Set background/foreground color
document.getElementById(fb.callback.id).style.backgroundColor = document.getElementById(fb.callback.id + 'RGB').style.backgroundColor = fb.color;
document.getElementById(fb.callback.id).style.color = document.getElementById(fb.callback.id + 'RGB').style.color = fb.hsl[2] > 0.5 ? '#000' : '#fff';
document.getElementById('colorRGB').value = document.getElementById(fb.callback.id).style.backgroundColor.replace(/\s/g,'');
// Change linked value
if (callback.value && callback.value != fb.color) {
callback.value = fb.color;
}
}
else if (typeof fb.callback == 'function') {
fb.callback.call(fb, fb.color);
}
};
/* Various color utility functions */
fb.pack = function (rgb) {
var r = Math.round(rgb[0] * 255);
var g = Math.round(rgb[1] * 255);
var b = Math.round(rgb[2] * 255);
return '#' + (r < 16 ? '0' : '') + r.toString(16) +
(g < 16 ? '0' : '') + g.toString(16) +
(b < 16 ? '0' : '') + b.toString(16);
};
fb.unpack = function (color) {
if (color.length == 7) {
return [parseInt('0x' + color.substring(1, 3)) / 255,
parseInt('0x' + color.substring(3, 5)) / 255,
parseInt('0x' + color.substring(5, 7)) / 255];
}
else if (color.length == 4) {
return [parseInt('0x' + color.substring(1, 2)) / 15,
parseInt('0x' + color.substring(2, 3)) / 15,
parseInt('0x' + color.substring(3, 4)) / 15];
}
};
fb.HSLToRGB = function (hsl) {
var m1, m2, r, g, b;
var h = hsl[0], s = hsl[1], l = hsl[2];
m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
m1 = l * 2 - m2;
return [this.hueToRGB(m1, m2, h+0.33333),
this.hueToRGB(m1, m2, h),
this.hueToRGB(m1, m2, h-0.33333)];
};
fb.hueToRGB = function (m1, m2, h) {
h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
if (h * 2 < 1) return m2;
if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
return m1;
};
fb.RGBToHSL = function (rgb) {
var min, max, delta, h, s, l;
var r = rgb[0], g = rgb[1], b = rgb[2];
min = Math.min(r, Math.min(g, b));
max = Math.max(r, Math.max(g, b));
delta = max - min;
l = (min + max) / 2;
s = 0;
if (l > 0 && l < 1) {
s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
}
h = 0;
if (delta > 0) {
if (max == r && max != g) h += (g - b) / delta;
if (max == g && max != b) h += (2 + (b - r) / delta);
if (max == b && max != r) h += (4 + (r - g) / delta);
h /= 6;
}
return [h, s, l];
};
// Install mousedown handler (the others are set on the document on-demand)
document.getElementsByClassName('farbtastic')[0].onmousedown = fb.mousedown;
// Init color
fb.setColor('#000000');
// Set linked elements/callback
if (callback) {
fb.linkTo(callback);
}
};

BIN
farbtastic/marker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

BIN
farbtastic/mask.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
farbtastic/wheel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 B

After

Width:  |  Height:  |  Size: 1.3 KiB

169
files.php
View File

@@ -1,141 +1,62 @@
<?php include("lib/settings.php");?>
<?php
include("lib/headers.php");
include("lib/settings.php");
$t = $text['files'];
// Is our dir in the list of GitHub local paths?
$isGitHubRepoDir = in_array($ICEcoder["root"],$ICEcoder['githubLocalPaths']);
?>
<!DOCTYPE html>
<html onMouseDown="top.ICEcoder.mouseDown=true" onMouseUp="top.ICEcoder.mouseDown=false" onMouseMove="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'files');top.ICEcoder.canResizeFilesW()}" onContextMenu="top.ICEcoder.rightClickedFile=top.ICEcoder.thisFileFolderLink; return top.ICEcoder.showMenu()" onClick="top.ICEcoder.selectFileFolder()">
<html onMouseDown="top.ICEcoder.mouseDown=true; top.ICEcoder.boxSelect(event,'down')" onMouseUp="top.ICEcoder.mouseDown=false; top.ICEcoder.boxSelect(event,'up'); if (!top.ICEcoder.overCloseLink) {top.ICEcoder.tabDragEnd()}" onMouseMove="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'files');top.ICEcoder.canResizeFilesW(); top.ICEcoder.boxSelect(event,'drag')}" onDrop="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'files')}" onContextMenu="top.ICEcoder.selectFileFolder(event); return top.ICEcoder.showMenu(event)" onClick="if (!top.ICEcoder.fmDraggedBox) {top.ICEcoder.selectFileFolder(event)} else {top.ICEcoder.fmDraggedBox = false}" onDragStart="top.ICEcoder.selectFileFolder(event);" onDragOver="event.preventDefault();event.stopPropagation()">
<head>
<title>ICEcoder v <?php echo $ICEcoder["versionNo"];?> file manager</title>
<link rel="stylesheet" type="text/css" href="lib/files.css">
<script src="lib/ice-coder.js" type="text/javascript"></script>
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" type="text/css" href="lib/files.css?microtime=<?php echo microtime(true);?>">
<link rel="stylesheet" type="text/css" href="lib/file-types.css?microtime=<?php echo microtime(true);?>">
<link rel="stylesheet" type="text/css" href="lib/file-type-icons.css?microtime=<?php echo microtime(true);?>">
<script src="lib/ice-coder<?php if (!$ICEcoder['devMode']) {echo '.min';}; echo ".js?microtime=".microtime(true);?>" type="text/javascript"></script>
<style>
ul.fileManager li a span { font-size: <?php echo $ICEcoder["fontSize"];?>; }
</style>
</head>
<body onLoad="top.ICEcoder.fileManager()" onDblClick="top.ICEcoder.openFile()" onKeyDown="return top.ICEcoder.interceptKeys('files', event);" onKeyUp="top.ICEcoder.resetKeys(event);">
<div title="Refresh" onClick="top.ICEcoder.refreshFileManager()" class="refresh"></div>
<body onFocus="top.ICEcoder.files.style.background='#444'" onBlur="top.ICEcoder.files.style.background='#383838'" onload="top.ICEcoder.showHideGithubNav(top.ICEcoder.githubDiff ? 'show' : 'hide')" onDblClick="top.ICEcoder.openFile()" onKeyDown="return top.ICEcoder.interceptKeys('files', event);" onKeyUp="top.ICEcoder.resetKeys(event);" onBlur="parent.ICEcoder.resetKeys(event);">
<div title="<?php echo $t['Lock'];?>" onClick="top.ICEcoder.lockUnlockNav()" id="fmLock" class="lock"></div>
<div title="<?php echo $t['Refresh'];?>" onClick="top.ICEcoder.refreshFileManager()" class="refresh"></div>
<div title="<?php echo $t['Plugins'];?>" onClick="top.ICEcoder.showHidePlugins(top.get('plugins').style.width != '55px' ? 'show' : 'hide')" class="plugins"></div>
<?php
// Function to sort given values alphabetically
function alphasort($a, $b) {
return strcasecmp($a->getPathname(), $b->getPathname());
}
// Class to put forward the values for sorting
class SortingIterator implements IteratorAggregate {
private $iterator = null;
public function __construct(Traversable $iterator, $callback) {
$array = iterator_to_array($iterator);
usort($array, $callback);
$this->iterator = new ArrayIterator($array);
$_SESSION['githubDiff'] = false;
if ($isGitHubRepoDir) {
$classExtra = !isset($_GET["githubDiff"]) || $_GET["githubDiff"] == "false" ? "Off" : "On";
if ($classExtra == "On") {
$_SESSION['githubDiff'] = true;
// Make sure we are showing the diff pane
echo "<script>top.ICEcoder.setSplitPane('on');</script>";
}
public function getIterator() {
return $this->iterator;
}
}
// Get a full list of dirs & files and begin sorting using above class & function
$objectList = new SortingIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($docRoot.$iceRoot), RecursiveIteratorIterator::SELF_FIRST), 'alphasort');
// With that done, create arrays for out final ordered list and a temp container of files
$finalArray = $tempArray = array();
// To start, push folders from object into finalArray, files into tempArray
foreach ($objectList as $objectRef) {
$fileFolderName = substr($objectRef->getPathname(), strlen($docRoot.$iceRoot));
$canAdd = true;
for ($i=0;$i<count($_SESSION['bannedFiles']);$i++) {
if(strpos($fileFolderName,$_SESSION['bannedFiles'][$i])!==false) {$canAdd = false;}
}
if ($objectRef->getFilename()!="." && $objectRef->getFilename()!=".." && $fileFolderName[strlen($fileFolderName)-1]!="/" && $canAdd) {
$fileFolderName!="/" && is_dir($docRoot.$iceRoot.$fileFolderName)
? array_push($finalArray,$fileFolderName)
: array_push($tempArray,$fileFolderName);
}
}
// Now push root files onto the end of finalArray and splice from the temp, leaving only files that reside in subdirs
for ($i=0;$i<count($tempArray);$i++) {
if (count(explode("/",$tempArray[$i]))==2) {
array_push($finalArray,$tempArray[$i]);
array_splice($tempArray,$i,1);
$i--;
}
}
// Lastly we push remaining files into the right subdirs in finalArray
for ($i=0;$i<count($tempArray);$i++) {
$insertAt = array_search(dirname($tempArray[$i]),$finalArray)+1;
for ($j=$insertAt;$j<count($finalArray);$j++) {
if ( strcasecmp(dirname($finalArray[$j]), dirname($tempArray[$i]))==0 &&
strcasecmp(basename($finalArray[$j]), basename($tempArray[$i]))<0 ||
(strpos(dirname($finalArray[$j]),dirname($tempArray[$i]))===0 && substr($finalArray[$j],strlen(dirname($tempArray[$i])),1)=="/")) {
$insertAt++;
}
}
array_splice($finalArray, $insertAt, 0, $tempArray[$i]);
}
// Finally, we have our ordered list, so display in a UL
$fileAtts = "";
if ($serverType=="Linux") {
$chmodInfo = substr(sprintf('%o', fileperms($docRoot.$iceRoot)), -3);
$fileAtts = '<span style="color: #888; font-size: 8px" id="|_perms">'.$chmodInfo.'</span>';
echo '<div title="GitHub" onClick="top.ICEcoder.githubDiffToggle()" class="github'.$classExtra.'"></div>';
}
?>
<ul class="fileManager">
<li class="pft-directory">
<a nohref title="/" onMouseOver="top.ICEcoder.overFileFolder('folder','/')" onMouseOut="top.ICEcoder.overFileFolder('folder','')" style="position: relative; left:-22px">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span id="|">/
<?php echo $iceRoot == "" ? "[ROOT]" : trim($iceRoot,"/");?>
</span>
<?php echo $fileAtts;?>
</a>
</li>
<?php
$lastPath="";
$fileCount=0;
$fileBytes=0;
$dirCount=0;
for ($i=0;$i<count($finalArray);$i++) {
$fileFolderName = str_replace("\\","/",$finalArray[$i]);
$type = is_dir($docRoot.$iceRoot.$fileFolderName) ? "folder" : "file";
$type=="folder" ? $dirCount++ : $fileCount++;
if ($type=="file") {
$fileBytes+=filesize($docRoot.$iceRoot.$fileFolderName);
// Get extension (prefix 'ext-' to prevent invalid classes from extensions that begin with numbers)
$ext = "ext-".pathinfo($docRoot.$iceRoot.$fileFolderName, PATHINFO_EXTENSION);
}
$thisDepth = count(explode("/",$fileFolderName));
$lastDepth = count(explode("/",$lastPath));
if ($thisDepth > $lastDepth) {echo "<ul>\n";}
if ($thisDepth < $lastDepth) {
for ($j=$lastDepth;$j>$thisDepth;$j--) {
echo "</ul>\n";
}
}
if ($serverType=="Linux") {
$chmodInfo = substr(sprintf('%o', fileperms($docRoot.$iceRoot.$fileFolderName)), -3);
$fileAtts = '<span style="color: #888; font-size: 8px" id="'.str_replace($docRoot,"",str_replace("/","|",$fileFolderName)).'_perms">'.$chmodInfo.'</span>';
}
$type == "folder" ? $class = 'pft-directory' : $class = 'pft-file '.strtolower($ext);
echo "<li class=\"".$class."\"><a nohref title=\"$fileFolderName\" onMouseOver=\"top.ICEcoder.overFileFolder('$type','".str_replace($docRoot,"",str_replace("/","|",$fileFolderName))."')\" onMouseOut=\"top.ICEcoder.overFileFolder('$type','')\" style=\"position: relative; left:-22px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span id=\"".str_replace($docRoot,"",str_replace("/","|",$fileFolderName))."\">".basename($fileFolderName)."</span> ".$fileAtts."</a>\n";
if ($i<count($finalArray)) {echo "</li>\n";}
$lastPath = $fileFolderName;
}
echo "</ul>\n</ul>\n";
// Output the JS vars
echo "<script>\n";
echo "top.ICEcoder.dirCount=";
echo $dirCount ? $dirCount : "0";
echo ";\ntop.ICEcoder.fileCount=";
echo $fileCount ? $fileCount : "0";
echo ";\ntop.ICEcoder.fileBytes=";
echo $fileBytes ? $fileBytes : "0";
echo ";\n</script>";
<li class="pft-directory dirOpen"><a nohref title="/" onMouseOver="top.ICEcoder.overFileFolder('folder','/')" onMouseOut="top.ICEcoder.overFileFolder('folder','')" onClick="top.ICEcoder.openCloseDir(this)" style="position: relative; left:-22px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span id="|">/ <?php
echo $iceRoot == "" ? $t['ROOT'] : trim($iceRoot,"/");
$thisPermVal = $serverType=="Linux" ? substr(sprintf('%o', fileperms($docRoot.$iceRoot)), -3) : "";
$permColors = $thisPermVal == 777 ? 'background: #800; color: #eee' : 'color: #888';
?></span> <span style="<?php echo $permColors;?>; font-size: 8px" id="|_perms"><?php echo $thisPermVal;;?></span></a></li><?php
// tree file items generated by the iFrame 'fileControl' below which loads in the items at location=| (ie, the root)
?>
</ul>
<iframe name="fileControl" src="lib/get-branch.php?location=|&csrf=<?php echo $_SESSION['csrf'];?>" style="display: none"></iframe>
<iframe name="testControl" style="display: none"></iframe>
<iframe name="processControl" style="display: none"></iframe>
<div class="fmDragBox" id="fmDragBox"></div>
<iframe name="fileControl" style="display: none"></iframe>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
images/checkbox.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
images/checkerboard.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

BIN
images/color-picker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 B

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
images/nav-alpha.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 999 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 B

BIN
images/nav-close-all.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 B

BIN
images/select-arrow.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

339
index.php
View File

@@ -1,112 +1,254 @@
<?php include("lib/settings.php");
<?php
include("lib/headers.php");
include("lib/settings.php");
$t = $text['index'];
// Check IP permissions
if (!in_array($_SERVER["REMOTE_ADDR"], $_SESSION['allowedIPs']) && !in_array("*", $_SESSION['allowedIPs'])) {
header('Location: /');
die("Sorry, not in allowed IPs list");
};
$updateMsg = '';
// Check for updates
if ($ICEcoder["checkUpdates"]) {
$icv = json_encode(file_get_contents("http://icecoder.net/latest-version.txt"));
$icv = rtrim(ltrim($icv,'"'),'"\\n');
if ($ICEcoder["versionNo"]<$icv) {
$updateMsg = ';top.ICEcoder.message(\'ICEcoder '.$icv.' now released\n\nPlease upgrade\')';
$icv_url = "https://icecoder.net/latest-version?thisVersion=".$ICEcoder["versionNo"];
if (ini_get('allow_url_fopen')) {
$icvInfo = @file_get_contents($icv_url,false,$context);
if (!$icvInfo) {
$icvInfo = file_get_contents(str_replace("https:","http:",$icv_url), false, $context);
}
$icvInfo = explode("\n",$icvInfo);
} elseif (function_exists('curl_init')) {
$ch = curl_init($icv_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$icvInfo = explode("\n", curl_exec($ch));
}
$icv = $icvInfo[0];
$icvI = str_replace('"','\\\'',$icvInfo[1]);
$thisV = $ICEcoder["versionNo"];
if (strpos($thisV,"beta")>-1 && !strpos($icv,"beta") && str_replace(" beta","",$thisV) == $icv) {$thisV-=0.1;};
if ($thisV<$icv) {
$updateMsg = ";top.ICEcoder.dataMessage('<b>".$t['UPDATE INFO'].":</b> ICEcoder v ".$icv." ".$t['now available'].". (".$t['Your version is']." v ".$ICEcoder["versionNo"].").<br><br><a onclick=\\'top.ICEcoder.update()\\' style=\\'color:#fff; background: #b00; padding: 5px; text-decoration: none; cursor: pointer\\'>".$t['Update now']."</a><br><br>".$icvI."');";
}
}
$isMac = strpos($_SERVER['HTTP_USER_AGENT'], "Macintosh")>-1 ? true : false;
?>
<!DOCTYPE html>
<html onMouseDown="top.ICEcoder.mouseDown=true" onMouseUp="top.ICEcoder.mouseDown=false" onMouseMove="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'top');top.ICEcoder.canResizeFilesW()}">
<html onMouseDown="top.ICEcoder.mouseDown=true" onMouseUp="top.ICEcoder.mouseDown=false; if (!top.ICEcoder.overCloseLink) {top.ICEcoder.tabDragEnd()}" onMouseMove="if(top.ICEcoder) {top.ICEcoder.getMouseXY(event,'top');top.ICEcoder.canResizeFilesW()}" onMouseWheel="if (!top.ICEcoder.getcMInstance().hasFocus() && !top.ICEcoder.getcMdiffInstance().hasFocus()) {event.wheelDelta > 0 ? top.ICEcoder.nextTab() : top.ICEcoder.previousTab();}">
<head>
<title>ICEcoder v <?php echo $ICEcoder["versionNo"];?></title>
<style>
#tabsBar.tabsBar .tab { font-size: <?php echo $ICEcoder["fontSize"];?>; }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" type="text/css" href="lib/ice-coder.css">
<meta name="viewport" content="width=device-width, initial-scale=0.5, user-scalable=no">
<link rel="stylesheet" type="text/css" href="lib/ice-coder.css?microtime=<?php echo microtime(true);?>">
<link rel="icon" type="image/png" href="favicon.png">
<script>
iceRoot = "<?php echo $ICEcoder["root"]; ?>";
iceRoot = "<?php echo $ICEcoder['root']; ?>";
window.onbeforeunload = function() {
if (top.ICEcoder.changedContent.indexOf(1)>-1) {
return "You have some unsaved changes.";
for(var i=1;i<=ICEcoder.savedPoints.length;i++) {
if (ICEcoder.savedPoints[i-1]!=top.ICEcoder.getcMInstance(i).changeGeneration()) {
return "<?php echo $t['You have some...'];?>.";
}
}
return "<?php echo $t['Are you sure...'];?>";
}
t = {
<?php
// Load the lang array for what's in the JS file
$t = $text['ice-coder'];
$tOutput = "";
foreach ($t as $key => $value) {
$tOutput .= '"'.$key.'" : "'.$value.'",'.PHP_EOL;
}
echo rtrim($tOutput,",".PHP_EOL).PHP_EOL;
// Back to the lang array for index
$t = $text['index'];
?>
}
</script>
<script language="JavaScript" src="lib/ice-coder.js"></script>
<script language="JavaScript" src="lib/ice-coder<?php if (!$ICEcoder['devMode']) {echo '.min';};?>.js?microtime=<?php echo microtime(true);?>"></script>
<script src="lib/mmd.js?microtime=<?php echo microtime(true);?>"></script>
<script src="farbtastic/farbtastic.js?microtime=<?php echo microtime(true);?>"></script>
<script src="lib/difflib.js?microtime=<?php echo microtime(true);?>"></script>
<link rel="stylesheet" href="farbtastic/farbtastic.css?microtime=<?php echo microtime(true);?>" type="text/css">
</head>
<body onLoad="<?php
echo 'top.ICEcoder.previousFiles = [';
if ($ICEcoder["previousFiles"]!="") {
$openFilesArray = explode(",",$ICEcoder["previousFiles"]);
echo "'".implode("','",$openFilesArray)."'";
}
echo "];top.ICEcoder.theme = '";
echo $ICEcoder["theme"]=="default" ? 'icecoder' : $ICEcoder["theme"];
echo "'";
echo ';top.ICEcoder.tabsIndent = ';
echo $ICEcoder["tabsIndent"] ? 'true' : 'false';
echo ';top.ICEcoder.openLastFiles = ';
echo $ICEcoder["openLastFiles"] ? 'true' : 'false';
echo ';top.ICEcoder.tabWidth = ';
echo $ICEcoder["tabWidth"];
?>;ICEcoder.init()<?php echo $updateMsg.$onLoadExtras;?>" onResize="ICEcoder.setLayout()" onKeyDown="return ICEcoder.interceptKeys('coder',event);" onKeyUp="parent.ICEcoder.resetKeys(event);">
echo "top.ICEcoder.versionNo = '".$ICEcoder["versionNo"]."';".
'top.ICEcoder.previousFiles = [';
if ($ICEcoder["previousFiles"]!="") {
$openFilesArray = explode(",",$ICEcoder["previousFiles"]);
echo "'".implode("','",$openFilesArray)."'";
}
echo "];";
echo "top.ICEcoder.theme = '".($ICEcoder["theme"]=="default" ? 'icecoder' : $ICEcoder["theme"])."';".
"top.ICEcoder.fontSize = '".$ICEcoder["fontSize"]."';".
"top.ICEcoder.openLastFiles = ".($ICEcoder["openLastFiles"] ? 'true' : 'false').";".
"top.ICEcoder.updateDiffOnSave = ".($ICEcoder["updateDiffOnSave"] ? 'true' : 'false').";".
"top.ICEcoder.languageUser = '".$ICEcoder["languageUser"]."';".
"top.ICEcoder.codeAssist = ".($ICEcoder["codeAssist"] ? 'true' : 'false').";".
"top.ICEcoder.lockedNav = ".($ICEcoder["lockedNav"] ? 'true' : 'false').";".
"top.ICEcoder.lineWrapping = ".($ICEcoder["lineWrapping"] ? 'true' : 'false').";".
"top.ICEcoder.indentWithTabs = ".($ICEcoder["indentWithTabs"] ? 'true' : 'false').";".
"top.ICEcoder.indentAuto = ".($ICEcoder["indentAuto"] ? 'true' : 'false').";".
"top.ICEcoder.indentSize = ".$ICEcoder["indentSize"].";".
"top.ICEcoder.demoMode = ".($ICEcoder["demoMode"] ? 'true' : 'false').";".
"top.ICEcoder.tagWrapperCommand = '".$ICEcoder["tagWrapperCommand"]."';".
"top.ICEcoder.autoComplete = '".$ICEcoder["autoComplete"]."';".
"top.ICEcoder.bugFilePaths = ['".implode("','",$ICEcoder["bugFilePaths"])."'];".
"top.ICEcoder.bugFileCheckTimer = ".$ICEcoder["bugFileCheckTimer"].";".
"top.ICEcoder.bugFileMaxLines = ".$ICEcoder["bugFileMaxLines"].";".
"top.ICEcoder.fileDirResOutput = '".$ICEcoder["fileDirResOutput"]."';".
"top.ICEcoder.newDirPerms = ".$ICEcoder["newDirPerms"].";".
"top.ICEcoder.newFilePerms = ".$ICEcoder["newFilePerms"].";";
if($ICEcoder["githubAuthToken"] != "") {
$_SESSION['githubAuthToken'] = $ICEcoder["githubAuthToken"];
echo "top.ICEcoder.githubAuthTokenSet = true;";
}
echo "top.ICEcoder.csrf = '".$_SESSION["csrf"]."';";
?>ICEcoder.init()<?php echo $updateMsg.$onLoadExtras;?>;top.ICEcoder.content.style.visibility='visible';top.ICEcoder.filesFrame.contentWindow.frames['processControl'].location.href = 'processes/on-load.php';<?php if(isset($_GET["display"]) && $_GET["display"] == "updated") {echo "top.ICEcoder.updated();";};?>" onResize="ICEcoder.setLayout()" onKeyDown="return ICEcoder.interceptKeys('coder',event);" onKeyUp="parent.ICEcoder.resetKeys(event);" onBlur="parent.ICEcoder.resetKeys(event);">
<div id="blackMask" class="blackMask" onClick="ICEcoder.showHide('hide',this)" onContextMenu="return false">
<div id="blackMask" class="blackMask" onClick="if (!ICEcoder.overPopup) {ICEcoder.showHide('hide',this)}" onContextMenu="return false">
<div class="popupVCenter">
<div class="popup" id="mediaContainer"></div>
</div>
<div class="floatingContainer" id="floatingContainer"></div>
</div>
<div id="loadingMask" class="blackMask" style="visibility: visible" onContextMenu="return false">
<span class="progressBar" id="progressBar" style="-webkit-animation:fullexpand 10s ease-out; -moz-animation:fullexpand 10s ease-out"></span>
<div class="popupVCenter">
<div class="popup">
<div class="circleOutside"></div>
<div class="circleInside"></div>
&nbsp;&nbsp;&nbsp;working...
<div class="spinner"></div>
<?php echo $t['working'];?>...
</div>
</div>
</div>
<div id="fileMenu" class="fileMenu" onMouseOver="ICEcoder.changeFilesW('expand')" onMouseOut="ICEcoder.changeFilesW('contract');this.style.display='none'" onContextMenu="return false">
<span id="folderMenuItems">
<a href="javascript:top.ICEcoder.newFile()" onMouseOver="ICEcoder.showFileMenu()">New File</a>
<a href="javascript:top.ICEcoder.newFolder()" onMouseOver="ICEcoder.showFileMenu()">New Folder</a>
<a href="javascript:top.ICEcoder.pasteFile(top.ICEcoder.rightClickedFile)" onMouseOver="ICEcoder.showFileMenu()">Paste</a>
</span>
<a href="javascript:top.ICEcoder.deleteFile(top.ICEcoder.rightClickedFile)" onMouseOver="ICEcoder.showFileMenu()">Delete</a>
<span id="singleFileMenuItems">
<a href="javascript:top.ICEcoder.copyFile(top.ICEcoder.rightClickedFile)" onMouseOver="ICEcoder.showFileMenu()">Copy</a>
<a href="javascript:top.ICEcoder.renameFile(top.ICEcoder.rightClickedFile)" onMouseOver="ICEcoder.showFileMenu()">Rename</a>
<a href="javascript:window.open(top.ICEcoder.rightClickedFile)" onMouseOver="ICEcoder.showFileMenu()">View Webpage</a>
</span>
<a href="javascript:top.ICEcoder.zipIt(top.ICEcoder.rightClickedFile)" onMouseOver="ICEcoder.showFileMenu()">Zip It!</a>
<a href="javascript:top.ICEcoder.propertiesScreen(top.ICEcoder.rightClickedFile)" onMouseOver="ICEcoder.showFileMenu()">Properties</a>
</div>
<div id="header" class="header" onContextMenu="return false">
<div class="plugins" id="pluginsContainer">
<?php echo $pluginsDisplay; ?>
<div id="plugins" class="plugins" style="<?php echo $ICEcoder["pluginPanelAligned"];?>: 0" onMouseOver="top.ICEcoder.showHidePlugins('show')" onMouseOut="top.ICEcoder.showHidePlugins('hide')" onClick="top.ICEcoder.showHidePlugins('hide')">
<div style="padding: 15px">
<a nohref onClick="top.ICEcoder.showColorPicker(top.document.getElementById('color') ? top.document.getElementById('color').value : '#123456')" title="Farbtastic
<?php echo $t['Color picker'];?>"><img src="images/color-picker.png" style="cursor: pointer" alt="Color Picker"></a><br><br>
<div id="pluginsOptional"><?php echo $pluginsDisplay; ?></div>
<a nohref onclick="top.ICEcoder.pluginsManager()" title="<?php echo $t['Plugins Manager'];?>" style="color: #fff; cursor: pointer">+ / -</a>
</div>
<div class="version">v <?php echo $ICEcoder["versionNo"];?></div><img src="images/full-screen.gif" id="screenMode" class="screenModeIcon" onClick="top.ICEcoder.fullScreenSwitcher()">
<img src="images/ice-coder.png" class="logo" onClick="ICEcoder.helpScreen()" onContextMenu="ICEcoder.settingsScreen()">
</div>
<div id="files" class="files" onMouseOver="ICEcoder.changeFilesW('expand')" onMouseOut="ICEcoder.changeFilesW('contract'); top.document.getElementById('fileMenu').style.display='none';">
<div class="account" id="account">
<div class="accountOptions">
<div title="Save" onClick="ICEcoder.fMIcon('save')" id="fMSave" class="save"></div>
<div title="Open" onClick="ICEcoder.fMIcon('open')" id="fMOpen" class="open"></div>
<div title="New File" onClick="ICEcoder.fMIcon('newFile')" id="fMNewFile" class="newFile"></div>
<div title="New Folder" onClick="ICEcoder.fMIcon('newFolder')" id="fMNewFolder" class="newFolder"></div>
<div title="Delete" onClick="ICEcoder.fMIcon('delete')" id="fMDelete" class="delete"></div>
<div title="Rename" onClick="ICEcoder.fMIcon('rename')" id="fMRename" class="rename"></div>
<div title="View" onClick="ICEcoder.fMIcon('view')" id="fMView" class="view"></div>
<div id="fileMenu" class="fileMenu" onMouseOver="ICEcoder.changeFilesW('expand')" onMouseOut="ICEcoder.changeFilesW('contract');top.ICEcoder.hideFileMenu()" style="opacity: 0" onContextMenu="return false">
<span id="folderMenuItems">
<a href="javascript:top.ICEcoder.newFile()" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['New File'];?></a>
<a href="javascript:top.ICEcoder.newFolder()" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['New Folder'];?></a>
<div onMouseOver="ICEcoder.showFileMenu()" style="padding: 2px 0"><hr></div>
<a href="javascript:top.ICEcoder.uploadFilesSelect(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Upload File(s)'];?></a>
<div style="display: none">
<form enctype="multipart/form-data" id="uploadFilesForm" action="lib/file-control-xhr.php?action=upload&file=/uploaded" method="POST" target="fileControl">
<input type="hidden" name="folder" id="uploadDir" value="/">
<input type="file" name="filesInput[]" id="fileInput" onchange="top.ICEcoder.uploadFilesSubmit(this)" multiple>
<input type="submit" value="Upload File">
<input type="hidden" name="csrf" value="<?php echo $_SESSION["csrf"]; ?>">
</form>
</div>
<a href="javascript:top.ICEcoder.pasteFiles(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])" onMouseOver="ICEcoder.showFileMenu()" id="fmMenuPasteOption" style="display: none"><?php echo $t['Paste'];?></a>
<div onMouseOver="ICEcoder.showFileMenu()" style="padding: 2px 0"><hr></div>
</span>
<a href="javascript:top.ICEcoder.openFilesFromList(top.ICEcoder.selectedFiles)" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Open'];?></a>
<a href="javascript:top.ICEcoder.copyFiles(top.ICEcoder.selectedFiles)" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Copy'];?></a>
<a href="javascript:top.ICEcoder.duplicateFiles(top.ICEcoder.selectedFiles)" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Duplicate'];?></a>
<a href="javascript:top.ICEcoder.deleteFiles(top.ICEcoder.selectedFiles)" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Delete'];?></a>
<span id="singleFileMenuItems">
<a href="javascript:top.ICEcoder.renameFile(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Rename'];?></a>
<div onMouseOver="ICEcoder.showFileMenu()" style="padding: 2px 0"><hr></div>
<a nohref onClick="window.open(iceRoot + top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1].replace(/\|/g,'/'))" onMouseOver="ICEcoder.showFileMenu()" style="cursor: pointer"><?php echo $t['View Webpage'];?></a>
</span>
<div onMouseOver="ICEcoder.showFileMenu()" style="padding: 2px 0"><hr></div>
<?php
if (file_exists(dirname(__FILE__)."/plugins/zip-it/index.php")) {
echo '<a href="javascript:top.ICEcoder.zipIt(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])" onMouseOver="ICEcoder.showFileMenu()">Zip It!</a>'.PHP_EOL;
};
?>
<a href="javascript:top.ICEcoder.downloadFile(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Download'];?></a>
<div onMouseOver="ICEcoder.showFileMenu()" style="padding: 2px 0"><hr></div>
<a href="javascript:top.ICEcoder.propertiesScreen(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])" onMouseOver="ICEcoder.showFileMenu()"><?php echo $t['Properties'];?></a>
</div>
<div title="Lock" onClick="ICEcoder.lockUnlockNav()" id="fmLock" class="lock"></div>
<div id="header" class="header" onContextMenu="return false"></div>
<div id="files" class="files" onMouseOver="ICEcoder.changeFilesW('expand')" onMouseOut="ICEcoder.changeFilesW('contract'); top.ICEcoder.hideFileMenu();" onContextMenu="return false">
<div id="fileNav" class="fileNav">
<ul>
<li><a nohref onclick="top.ICEcoder.canShowFMNav=true;top.ICEcoder.showHideFileNav('show','optionsFile')" onmouseover="if(top.ICEcoder.canShowFMNav) {top.ICEcoder.showHideFileNav('show','optionsFile')}" id="optionsFileNav"><?php echo $t['File'];?></a></li>
<li><a nohref onclick="top.ICEcoder.canShowFMNav=true;top.ICEcoder.showHideFileNav('show','optionsEdit')" onmouseover="if(top.ICEcoder.canShowFMNav) {top.ICEcoder.showHideFileNav('show','optionsEdit')}" id="optionsEditNav"><?php echo $t['Edit'];?></a></li>
<li><a nohref onclick="top.ICEcoder.canShowFMNav=true;top.ICEcoder.showHideFileNav('show','optionsSource')" onmouseover="if(top.ICEcoder.canShowFMNav) {top.ICEcoder.showHideFileNav('show','optionsSource')}" id="optionsSourceNav"><?php echo $t['Source'];?></a></li>
<li><a nohref onclick="top.ICEcoder.canShowFMNav=true;top.ICEcoder.showHideFileNav('show','optionsHelp')" onmouseover="if(top.ICEcoder.canShowFMNav) {top.ICEcoder.showHideFileNav('show','optionsHelp')}" id="optionsHelpNav"><?php echo $t['Help'];?></a></li>
</ul>
</div>
<div id="githubNav" class="githubNav">
<div class="commit" id="githubNavCommit" onclick="top.ICEcoder.githubAction('commit')">Commit</div>
<div class="selected" id="githubNavSelectedCount">Selected: 0</div>
<div class="pull" id="githubNavPull" onclick="top.ICEcoder.githubAction('pull')">Pull</div>
</div>
<div class="options" id="fileOptions">
<div id="optionsFile" class="optionsList" onmouseover="top.ICEcoder.showHideFileNav('show',this.id)" onmouseout="top.ICEcoder.showHideFileNav('hide',this.id);top.ICEcoder.canShowFMNav=false">
<ul>
<li><a nohref onClick="ICEcoder.newFile()"><?php echo $t['New File'];?>...</a></li>
<li><a nohref onClick="ICEcoder.newFolder()"><?php echo $t['New Folder'];?>...</a></li>
<li><a nohref onClick="ICEcoder.openPrompt()"><?php echo $t['Open'];?>...</a></li>
<li><a nohref onClick="ICEcoder.saveFile()"><?php echo $t['Save'];?></a></li>
<li><a nohref onclick="ICEcoder.saveFile('saveAs')"><?php echo $t['Save As'];?>...</a></li>
<li><a nohref onclick="ICEcoder.openPreviewWindow()"><?php echo $t['Live Preview'];?></a></li>
<li><a nohref onclick="ICEcoder.downloadFile(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])"><?php echo $t['Download'];?></a></li>
<li><a nohref onclick="ICEcoder.copyFiles(top.ICEcoder.selectedFiles)"><?php echo $t['Copy'];?></a></li>
<li><a nohref onclick="ICEcoder.pasteFiles(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])"><?php echo $t['Paste'];?></a></li>
<li><a nohref onclick="ICEcoder.deleteFiles(top.ICEcoder.selectedFiles)"><?php echo $t['Delete'];?></a></li>
<li><a nohref onclick="ICEcoder.duplicateFiles(top.ICEcoder.selectedFiles)"><?php echo $t['Duplicate'];?></a></li>
<li><a nohref onclick="ICEcoder.renameFile(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])"><?php echo $t['Rename'];?></a></li>
<li><a nohref onclick="ICEcoder.uploadFilesSelect(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])"><?php echo $t['Upload'];?>...</a></li>
<li><a nohref onclick="ICEcoder.zipIt(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])"><?php echo $t['Zip'];?></a></li>
<li><a nohref onclick="ICEcoder.propertiesScreen(top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1])"><?php echo $t['Properties'];?>...</a></li>
<li><a nohref onClick="ICEcoder.printCode()"><?php echo $t['Print'];?>...</a></li>
<li><a nohref onClick="ICEcoder.fullScreenSwitcher()"><?php echo $t['Fullscreen toggle'];?></a></li>
<li><a nohref onClick="ICEcoder.logout()"><?php echo $t['Logout'];?></a></li>
</ul>
</div>
<div id="optionsEdit" class="optionsList" onmouseover="top.ICEcoder.showHideFileNav('show',this.id)" onmouseout="top.ICEcoder.showHideFileNav('hide',this.id);top.ICEcoder.canShowFMNav=false">
<ul>
<li><a nohref onclick="ICEcoder.undo()"><?php echo $t['Undo'];?></a></li>
<li><a nohref onclick="ICEcoder.redo()"><?php echo $t['Redo'];?></a></li>
<li><a nohref onclick="ICEcoder.indent('more')"><?php echo $t['Indent more'];?></a></li>
<li><a nohref onclick="ICEcoder.indent('less')"><?php echo $t['Indent less'];?></a></li>
<li><a nohref onclick="ICEcoder.autocomplete()"><?php echo $t['Autocomplete'];?></a></li>
<li><a nohref onclick="ICEcoder.lineCommentToggle()"><?php echo $t['Comment/Uncomment'];?></a></li>
<li><a nohref onclick="ICEcoder.jumpToDefinition()"><?php echo $t['Jump to Definition'];?></a></li>
<li><a nohref onClick="ICEcoder.settingsScreen()"><?php echo $t['Settings'];?></a></li>
</ul>
</div>
<div id="optionsSource" class="optionsList" onmouseover="top.ICEcoder.showHideFileNav('show',this.id)" onmouseout="top.ICEcoder.showHideFileNav('hide',this.id);top.ICEcoder.canShowFMNav=false">
<ul>
<li><a nohref onclick="ICEcoder.refreshFileManager()">Localhost</a></li>
<li><a nohref onclick="ICEcoder.githubManager()">GitHub</a></li>
<li><a nohref onclick="ICEcoder.message('SVN integration coming soon')">SVN</a></li>
<li><a nohref onclick="ICEcoder.message('Bitbucket integration coming soon\n\nCan you help with this? Get involved at icecoder.net')">Bitbucket</a></li>
<li><a nohref onclick="ICEcoder.message('Amazon AWS integration coming soon\n\nCan you help with this? Get involved at icecoder.net')">Amazon AWS</a></li>
<li><a nohref onclick="ICEcoder.message('Dropbox integration coming soon\n\nCan you help with this? Get involved at icecoder.net')">Dropbox</a></li>
<li><a nohref onclick="ICEcoder.message('FTP integration coming soon\n\nCan you help with this? Get involved at icecoder.net')">FTP</a></li>
<li><a nohref onclick="ICEcoder.message('SSH integration coming soon\n\nCan you help with this? Get involved at icecoder.net')">SSH</a></li>
</ul>
</div>
<div id="optionsHelp" class="optionsList" onmouseover="top.ICEcoder.showHideFileNav('show',this.id)" onmouseout="top.ICEcoder.showHideFileNav('hide',this.id);top.ICEcoder.canShowFMNav=false">
<ul>
<li><a nohref onclick="ICEcoder.showManual('<?php echo $ICEcoder["versionNo"];?>')"><?php echo $t['Manual'];?></a></li>
<li><a nohref onClick="ICEcoder.helpScreen()"><?php echo $t['Shortcuts'];?></a></li>
<li><a nohref onclick="ICEcoder.searchForSelected()"><?php echo $t['Search for selected'];?></a></li>
<li><a href="https://icecoder.net" target="_blank">ICEcoder <?php echo $t['website'];?></a></li>
</ul>
</div>
</div>
<iframe id="filesFrame" class="frame" name="ff" src="files.php" style="opacity: 0" onLoad="this.style.opacity='1';this.contentWindow.onscroll=function(){top.ICEcoder.mouseDown=false}"></iframe>
@@ -115,54 +257,69 @@ window.onbeforeunload = function() {
<div id="editor" class="editor">
<div id="tabsBar" class="tabsBar" onContextMenu="return false">
<a nohref onClick="top.ICEcoder.closeAllTabs()"><img src="images/nav-close-all.gif" class="closeAllTabs" title="<?php echo $t['Close all tabs'];?>"></a>
<a nohref onClick="top.ICEcoder.alphaTabs()"><img src="images/nav-alpha.png" class="alphaTabs" title="<?php echo $t['Alphabetize tabs'];?>"></a>
<?php
for ($i=1;$i<=10;$i++) {
echo '<div id="tab'.$i.'" class="tab" draggable="true" onClick="ICEcoder.canSwitchTabs ? ICEcoder.switchTab('.$i.') : ICEcoder.canSwitchTabs=true"></div>';
for ($i=1;$i<=100;$i++) {
echo '<div id="tab'.$i.'" class="tab" onMouseDown="ICEcoder.canSwitchTabs ? ICEcoder.switchTab(parseInt(this.id.slice(3),10)) : ICEcoder.canSwitchTabs=true; thisColor=top.ICEcoder.tabFGselected; if (!top.ICEcoder.overCloseLink) {ICEcoder.tabDragStart(parseInt(this.id.slice(3),10))}; if (event.button==1) {ICEcoder.closeTab(parseInt(this.id.slice(3),10)); return false};" onMouseOver="thisColor=this.style.color;this.style.color=top.ICEcoder.tabFGselected" onMouseOut="this.style.color=thisColor"></div>';
}
?><div class="newTab" onClick="ICEcoder.newTab()"><img src="images/nav-new.png"></div>
?><div class="newTab" onClick="ICEcoder.newTab()" id="newTab">+</div>
</div>
<div id="findBar" class="findBar" onContextMenu="return false">
<form name="findAndReplace" onSubmit="ICEcoder.findReplace('findReplace',false,true);return false">
<form name="findAndReplace" onSubmit="ICEcoder.findReplace(top.document.getElementById('find').value,false,true);return false">
<div class="findReplace">
<div class="findText">Find</div>
<input type="text" name="find" value="" id="find" class="textbox find" onKeyUp="ICEcoder.findReplace('find',true,false)">
<div class="findText"><?php echo $t['Find'];?></div>
<input type="text" name="find" value="" id="find" class="textbox find" onKeyUp="ICEcoder.findReplace(top.document.getElementById('find').value,true,false,event.keyCode == 27)">
<select name="connector" onChange="ICEcoder.findReplaceOptions()">
<option>in</option>
<option>and</option>
</select>
<div class="replaceText" id="rText" style="display: none">
<select name="replaceAction" class="replaceAction">
<option>replace</option>
<option>replace all</option>
<div class="selectWrapper" style="width: 41px">
<select name="connector" onChange="ICEcoder.findReplaceOptions()" style="width: 40px; margin-top: 4px">
<option><?php echo $t['in'];?></option>
<option><?php echo $t['and'];?></option>
</select>
</div>
<div class="replaceText" id="rText" style="display: none">
<div class="selectWrapper" style="width: 75px; overflow: visible">
<select name="replaceAction" style="width: 72px; margin-top: -2px">
<option><?php echo $t['replace'];?></option>
<option><?php echo $t['replace all'];?></option>
</select>
</div>
with
</div>
<input type="text" name="replace" value="" id="replace" class="textbox replace" style="display: none">
<div class="targetText" id="rTarget" style="display: none">in</div>
<select name="target" onChange="ICEcoder.updateResultsDisplay(this.value=='this document' ? 'show' : 'hide')">
<option>this document</option>
<option>open documents</option>
<option>all files</option>
<option>all filenames</option>
</select>
<input type="submit" name="submit" value="&gt;&gt;" class="submit">
<div class="selectWrapper" style="width: 104px">
<select name="target" onChange="ICEcoder.updateResultsDisplay(this.value=='this document' ? 'show' : 'hide')" style="width: 101px; margin-top: 4px; margin-left: 2px">
<option><?php echo $t['this document'];?></option>
<option><?php echo $t['open documents'];?></option>
<option><?php echo $t['all files'];?></option>
<option><?php echo $t['all filenames'];?></option>
</select>
</div>
<input type="submit" name="submit" id="findReplaceSubmit" value="&gt;&gt;" class="submit">
<div class="results" id="results"></div>
</div>
<input type="hidden" name="csrf" value="<?php echo $_SESSION["csrf"]; ?>">
</form>
<form onSubmit="return ICEcoder.goToLine()">
<div class="codeAssist"><input type="checkbox" name="codeAssist" id="codeAssist" checked onClick="top.ICEcoder.codeAssistToggle()">Code Assist</div>
<div class="goLine">Go to Line<input type="text" name="goToLine" value="" id="goToLineNo" class="textbox goToLine">
<div class="codeAssist" title="<?php echo $t['Turn on/off...'];?>">
<input type="checkbox" name="codeAssist" id="codeAssist" class="codeAssistCheckbox" <?php if ($ICEcoder['codeAssist']) {echo 'checked ';};?>>
<span class="codeAssistDisplay" id="codeAssistDisplay" style="background-position: <?php echo $ICEcoder['codeAssist'] ? "0" : "-16";?> 0" onClick="top.ICEcoder.codeAssistToggle()"></span> <?php echo $t['Code Assist'];?>
</div>
<div class="goLine"><?php echo $t['Go to Line'];?> <input type="text" name="goToLine" value="" id="goToLineNo" class="textbox goToLine">
<div class="view" title="<?php echo $t['View'];?>" onClick="top.ICEcoder.openPreviewWindow()" id="fMView"></div>
<div class="bug" title="<?php echo $t['Bug reporting not active'];?>" onClick="top.ICEcoder.openBugReport()" id="bugIcon"></div>
<input type="hidden" name="csrf" value="<?php echo $_SESSION["csrf"]; ?>">
</form>
</div>
<iframe name="contentFrame" id="content" src="editor.php" class="code"></iframe>
</div>
<div class="footer" id="footer" onContextMenu="return false">
<div class="nesting" id="nestValid">Nesting OK</div>
<div class="nestLoc">Cursor nest location</div>
<div class="nestDisplay" id="nestDisplay"></div>
<div class="charDisplay" id="charDisplay"><span id="char"></span></div>
<div class="nesting" id="nestValid"></div>
<div class="splitPaneControls" id="splitPaneControls"><div class="off" id="splitPaneControlsOff" title="<?php echo $t['Single pane'];?>" onclick="top.ICEcoder.setSplitPane('off')"></div><div class="on" id="splitPaneControlsOn" title="<?php echo $t['Diff pane also'];?>" onclick="top.ICEcoder.setSplitPane('on')" style="opacity: 0.5"></div></div>
<div class="byteDisplay" id="byteDisplay" style="display: none" onClick="top.ICEcoder.showDisplay('char')"></div>
<div class="charDisplay" id="charDisplay" style="display: inline-block" onClick="top.ICEcoder.showDisplay('byte')"></div>
</div>
<script>

427
lang/chinese-simplified.php Normal file
View File

@@ -0,0 +1,427 @@
<?php
// Chinese language translation
// by: @lzh370 (GitHub)
// lzh370@qq.com
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>点击图标<br>求助 &amp;<br>使用信息</b>",
"server" => "服务器",
"Server name, OS..." => "服务器名称, OS & IP:",
"Root" => "根目录:",
"ICEcoder root" => "ICEcoder 根目录:",
"PHP version" => "PHP 版本:",
"Date & time" => "日期 & 时间:",
"your device" => "你的设备",
"Browser" => "浏览器:",
"Your IP" => "你的 IP:",
"files" => "文件",
"Last 10 files..." => "最后10个打开的文件:",
"none" => "[none]",
"test suite" => "测试套件",
"Run unit tests" => "运行单元测试",
"dev mode" => "开发模式",
"Status" => "状态",
"Using" => "使用",
"You can switch..." => "你可以在 lib/config__settings.php 中设置开发模式开关",
"results" => "结果"
),
"files" =>
array(
"Lock" => "锁定",
"Refresh" => "刷新",
"ROOT" => "[ROOT]"
),
"index" =>
array(
"UPDATE INFO" => "更新信息",
"now available" => "现在可以",
"Your version is" => "你的版本是",
"Update now" => "现在更新",
"You have some..." => "你有一些未保存的更改",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "载入中",
"Color picker" => "颜色选择器",
"New File" => "新建文件",
"New Folder" => "新建文件夹",
"Upload File(s)" => "上传文件",
"Paste" => "粘贴",
"Open" => "打开",
"Copy" => "复制",
"Duplicate" => "副本",
"Delete" => "删除",
"Rename" => "重命名",
"View Webpage" => "预览网页",
"Download" => "下载",
"Properties" => "属性",
"File" => "文件",
"Edit" => "编辑",
"Remote" => "远程",
"Help" => "帮助",
"Save" => "保存",
"Save As" => "另存为",
"Live Preview" => "实时预览",
"Upload" => "上传",
"Zip" => "压缩",
"Print" => "打印",
"Fullscreen toggle" => "全屏切换",
"Logout" => "退出",
"Undo" => "撤销",
"Redo" => "重做",
"Indent more" => "增加缩进",
"Indent less" => "减少缩进",
"Autocomplete" => "自动完成",
"Comment/Uncomment" => "注释 / 清除注释",
"Jump to Definition" => "跳转至指定行",
"Manual" => "手册",
"Shortcuts" => "快捷键",
"Settings" => "设置",
"Search for selected" => "搜索选择",
"website" => "网站",
"Close all tabs" => "关闭所有选项卡",
"Alphabetize tabs" => "按字母顺序排列的选项卡",
// "Find" => "搜索",
// "in" => "in",
// "and" => "and",
// "replace" => "替换",
// "replace all" => "替换所有",
// "this document" => "当前文件",
// "open documents" => "打开的文件",
// "all files" => "所有文件",
// "all filenames" => "所有文件名",
"Turn on/off..." => "开启/关闭代码辅助",
"Code Assist" => "代码辅助",
"Go to Line" => "转到行",
"View" => "预览",
"Bug reporting not active" => "错误报告没有激活"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "搜索到:"
),
"file-control" =>
array(
"Sorry" => "抱歉",
"does not seem..." => "服务器上不存在",
"Sorry, could not..." => "抱歉, 不能得到的内容",
"Sorry, cannot create..." => "抱歉, 不能创建文件夹",
"Sorry, cannot copy" => "抱歉, 不能复制",
"into" => "",
"Uploaded file(s) OK" => "上传文件完成",
"Sorry, cannot upload" => "抱歉, 不能上传",
"Sorry, cannot upload..." => "抱歉, 在演示模式不能上传文件",
"Sorry, cannot rename" => "抱歉, 不能重命名",
"Maybe public write..." => "也许父文件夹也需要写入权限?",
"Sorry, cannot move" => "抱歉, 不能移动",
"Sorry, cannot save" => "抱歉, 不能保存",
"Sorry, cannot replace..." => "抱歉, 目标不能替换文本",
"Sorry, cannot change..." => "抱歉, 目标不能更改权限",
"Sorry, cannot delete..." => "抱歉, 不能删除根级别ROOT",
"Sorry, cannot delete" => "抱歉, 不能删除",
"Sorry, this file..." => "抱歉, 此文件已更改, 不能保存",
"Reload this file..." => "重新加载该文件, 你的版本复制到一个新文件?",
"There was a..." => "这些代码还没有完全准备好. 所以 ICEcoder 需要再次重新加载.",
"displayed at" => "显示在",
"Enter filename to..." => "输入文件名并保存到",
"That file exists..." => "该文件已存在, 要覆盖吗?",
"Saving" => "正在保存"
),
"get-branch" =>
array(
"There are no..." => "本地文件与 GitHub repo 没有明显差异. 切换回普通模式?",
"Sorry, there was..." => "抱歉, 这里有一个错误, 代码:",
"Your local folder..." => "你的本地文件夹是空的, 你是否想克隆"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "抱歉, 不能创建目录到",
"Cannot update config..." => "不能更新配置文件. 请对",
"and try again" => "增加写入权限, 并再次尝试",
"saving github paths" => "正在保存 github 路径...",
"github paths" => "github 路径",
"Choose existing path" => "选择现有路径",
"Local path" => "本地路径",
"Remote GitHub path" => "远程 GitHub 路径",
"Choose" => "选择",
"Set local and..." => "设置本地路径和远程路径需要去除空格",
"Update" => "更新",
"Add new path" => "增加新路径",
"Add" => "增加",
"Usage Info" => "使用方法:",
"Enter relative local..." => "输入本地相对路径 (/server/myfiles) 和 GitHub 绝对路径 (https://github.com/user/repo 或 https://github.com/user/repo/tree/branch 各分支), 按照示例. 完成后你就建立了这两个地点的源路径, 它是成对数存在.",
"You can then..." => "你可以选择一个路径作为 ICEcoder 的根路径.",
"The file manager..." => "文件管理器右侧会显示一个新的GitHub图标, 您可以点击执行, 会自动校验并显示本地与github源之间的差异. 这些差别可以被提交并推送到在GitHub上的远程路径或克隆到你的本地路径, 用来同步您的文件.",
"If you want..." => "如果你想设置的另一个根路径, 可以在 帮助 > 设置窗口 中进行设置."
),
"github" =>
array(
"Sorry, you do..." => "抱歉, 您的服务器没有启用 OpenSSL 的 PHP 实例, 所以 https 目前不可用. GitHub 的数据传输必须要用 https 连接, 请修改 php.ini 设置, 重启你的服务器并重新尝试"
),
"headers" =>
array(
"Bad CSRF token..." => "错误的 CSRF token. 请在 https://github.com/mattpass/ICEcoder 报告错误信息, 以便我们修复它."
),
"help" =>
array(
"shortcuts" => "快捷键",
"Within document" => "文档",
"On Tabs" => "选项卡",
"Within file manager" => "文件管理器",
"Anywhere" => "其他",
"Space" => "空格",
"Click" => "单击",
"or" => "",
"Left click" => "左键单击",
"Middle click" => "中键单击",
"Double click tap..." => "双击 / 点击 (移动端)",
"Right click" => "右键单击",
"Middle scrollwheel" => "中间滚轮滚动",
"Drag" => "拖动",
"Autocomplete add snippet" => "自动完成 / 添加片段",
"Multiple select" => "多选",
"Move line up" => "向上移动行",
"Move line down" => "向下移动行",
"Duplicate lines" => "复制行",
"Remove lines" => "删除行",
"Insert line before" => "前插入行",
"Insert line after" => "后插入行",
"Search for selected" => "搜索选择",
"Jump to definition" => "跳转到 / 跳转回",
"Comment uncomment" => "注释 / 清除注释",
"Insert tab indent" => "插入tab / 插入选择",
"Wrap with div" => "封装 &lt;div&gt;",
"Wrap with span" => "封装 &lt;span&gt;",
"Wrap unwrap p" => "封装 / 撤销封装 &lt;p&gt;",
"Wrap unwrap a" => "封装 / 撤销封装 &lt;a&gt;",
"Wrap unwrap b" => "封装 / 撤销封装 &lt;b&gt;",
"Wrap unwrap i" => "封装 / 撤销封装 &lt;i&gt;",
"Wrap unwrap strong" => "封装 / 撤销封装 &lt;strong&gt;",
"Wrap unwrap em" => "封装 / 撤销封装 &lt;em&gt;",
"Wrap unwrap li" => "封装 / 撤销封装 &lt;li&gt;",
"Wrap unwrap h1..." => "封装 / 撤销封装 &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "换行 &lt;br&gt;",
"Close tab" => "关闭选项卡",
"Select file folder" => "选择文件 / 文件夹",
"Open file" => "打开文件",
"Range select" => "范围选择",
"Options for selected" => "所选的选项",
"Delete selected" => "删除已选",
"Next previous tab" => "下一个 / 上一个 选项卡",
"Next tab" => "下一个选项卡",
"Previous tab" => "上一个选项卡",
"New tab" => "新建选项卡",
"Close current tab" => "关闭当前选项卡",
"Open file prompt" => "打开文件的提示",
"Find" => "搜索",
"Focus on Go..." => "光标定位到转到行的输入框",
"Save" => "保存",
"Save as" => "另存为...",
"View webpage" => "预览网页",
"Contract expand file..." => "收缩 / 扩展文件管理器",
"Fold unfold current..." => "折叠 / 展开当前行",
"Refocus on document" => "光标重新聚焦于文档",
"Cancel tasks" => "取消任务"
),
"ice-coder" =>
array(
"No text selected..." => "搜索中没有选中的文本",
"Creating Folder" => "正在创建文件夹",
"Sorry you can..." => "抱歉, 只能同时打开100个文件!",
"Opening File" => "正在打开文件",
"Enter relative file..." => "输入本地相对路径 (前缀 /) 或远程 URL",
"Getting" => "正在获取",
"Please enter the..." => "请输入新的名称为",
"Renaming to" => "正在重命名",
"Moving to" => "正在移动到",
"Deleting File" => "正在删除文件",
"Pasting File" => "正在粘贴文件",
"Sorry cannot paste..." => "抱歉, 无法粘贴到根路径",
"Nothing to paste..." => "粘贴失败, 请先复制一个文件 / 文件夹!",
"Replacing text in" => "正在替换文本",
"Cancelled tasks" => "取消任务",
"Open previous files" => "打开以前的文件?",
"Please enter your..." => "请输入您的 GitHub token (允许使用个人令牌或客户端令牌). 可以查看 Github Auth Token 的帮助 > 更多信息在设置窗口",
"This will compare..." => "将比较和显示你的本地目录和 GitHub repo 之间的差异. 确定吗?",
"Please note for..." => "请注意: 需要更新才能正常工作, 你需要为所有 ICEcoder 文件和文件夹设置写入和删除权限. 如果您需要恢复 ICEcoder 到这个版本, 你可以在 /tmp 目录找到它们. 点击 OK 继续使用自动升级或点击 cancel 访问 ICEcoder 网站, 您也可以到 grab 的项目首页下载 zip 来进行手动更新.",
"You can start..." => "你可以在 帮助 > 设置中启动错误报告",
"Error cannot find..." => "错误: 无法找到/进入错误文件路径",
"No new errors..." => "没有新的错误被找到",
"You have made..." => "您已做的更改未保存。您确定要关闭它而不保存吗?",
"Close all tabs" => "是否关闭所有选项卡?"
),
"login" =>
array(
"set password" => "设置密码",
"login" => "登陆",
"To disable registration..." => "要禁用注册模式, 请打开设置或打开文件 lib/config___settings.php 并更改 enableRegistration 为 false , 并重新载入本页面",
"Registration mode enabled" => "注册模式已启用",
"auto-check for updates" => "自动检测更新",
"To put into..." => "要禁用多用户模式, 请打开设置或打开文件 lib/config___settings.php 并更改 multiUser 为 true , 并重新载入本页面",
"multi-user" => "多用户"
),
"multiple-results" =>
array(
"rename all" => "重命名所有",
"replace all" => "全部替换",
"document" => "文档",
"Found" => "找到",
"times" => "时间",
"replace" => "替换",
"file folder" => "文件/文件夹",
"rename to" => "重命名为",
"rename" => "重命名",
"file" => "文件",
"No matches found" => "没有找到匹配",
"selected" => "选择",
"found in" => "查询结果在",
"Replaced" => "已替换"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder 需要重新加载,这个插件才可以使用。现在刷新吗?",
"saving plugins" => "正在保存插件...",
"Cannot update config..." => "不能更新配置文件. 请为",
"and try again" => "设置写入权限并刷新重试",
"couldnt delete dir" => "不能删除目录",
"couldnt delete file" => "不能删除文件",
"plugins" => "插件",
"Guide to writing..." => "编写插件指南",
"Manage Installed" => "管理已安装",
"URL" => "URL",
"Target" => "目标",
"Timer" => "定时器",
"Update" => "更新",
"Install" => "安装",
"Uninstall" => "卸载",
"Reload after install..." => "安装后需要刷新"
),
"properties" =>
array(
"properties" => "属性",
"Size" => "尺寸",
"Modified" => "修改",
"Last access" => "最近访问",
"Type" => "类型",
"Readable Writeable" => "可读 / 可写",
"Relative path" => "相对路径",
"Absolute path" => "绝对路径",
"Contains" => "包含",
"Permissions" => "权限",
"Owner" => "所有者",
"Group" => "",
"Public" => "公众",
"Read" => "读取",
"Write" => "写入",
"Execute" => "执行",
"Change to" => "更改为",
"update" => "更新"
),
"settings-common" =>
array(
"Your document does..." => "你的文档不是UTF-8编码, 它将被转换"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "不能更新配置文件. 请为",
"and try again" => "增加写入权限并再次尝试"
),
"settings-screen" =>
array(
"settings" => "设置",
"version" => "版本",
"website" => "网站",
"git" => "git",
"codemirror dir" => "codemirror 目录",
"codemirror version" => "codemirror 版本",
"file manager root" => "文件管理器的根目录ROOT",
"Free to use..." => "您可以自由使用它, 无论商业与否, 只需让我知道有任何很酷的使用或有定制的:)同样我们无任何责任和任何担保, 使用所有的责任是你的. 很多个人和公司为 ICEcoder 作出过贡献, 在此篇幅有限无法一一列举, 请访问贡献者详细列表",
"functionality" => "功能",
"check for updates..." => "启动时检查更新",
"auto open last..." => "启动时自动载入最后打开的文件",
"when finding in..." => "在查找文件时, 排除",
"assisting" => "辅助",
"code assist" => "代码辅助",
"visible tabs" => "缩进线可见",
"locked nav" => "锁定导航",
"tag wrapper command" => "标签封装命令",
"auto-complete on" => "打开自动完成",
"security" => "安全",
"new password" => "新密码",
"8 chars min" => "最少8个字符",
"confirm password" => "确认密码",
"banned files/folders" => "禁止文件 / 文件夹",
"banned paths" => "禁止路径",
"ip addresses" => "ip 地址",
"Slash prefixed comma..." => "斜线前缀, 以半角逗号分隔",
"Comma delimited" => "以半角逗号分隔",
"style" => "样式",
"theme" => "主题",
"line wrapping" => "换行",
"indent type" => "缩进类型",
"indent size" => "缩进大小",
"font size" => "字体大小",
"auto indent" => "auto indent",
"layout" => "布局",
"plugin panel aligned" => "插件板对齐",
"file manager" => "文件管理器",
"root" => "root",
"Slash prefixed" => "斜线前缀",
"bug reporting" => "错误报告",
"check in files" => "检查文件",
"every" => "任何",
"secs getting last" => "秒, 最后得到",
"lines" => "",
"multi-user" => "多用户",
"Make sure you..." => "确保你没有把自己锁了",
"Registration" => "启用注册",
"auth token" => "auth token",
"Required to get..." => "如需要得到差异列表, 提交您 GitHub 上托管的 repo 等. 如果你还没有一个, 您可以使用:".PHP_EOL.PHP_EOL.
"- 个人访问令牌 (https://help.github.com/articles/creating-an-access-token-for-command-line-use), 或".PHP_EOL.
"- 完整的客户端/机密双令牌 (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"我们不建议您在此处设置您的令牌, 更安全的方式是当ICEcoder要求输入时将其只保存在会话中.".PHP_EOL.PHP_EOL.
"然而, 如果你在一个值得信赖和安全的环境中工作, 把它设置在这里是更有效的.",
"Sorry cannot commit..." => "抱歉, 设置不能在演示模式下提交",
"update" => "更新"
),
"settings-update" =>
array(
"Cannot update config..." => "不能更新配置文件. 请为",
"and try again" => " 增加写入权限并重新尝试",
"and press refresh" => "增加写入权限并刷新"
),
"updater" =>
array(
"Update appears to..." => "更新似乎是成功的"
)
);
?>

View File

@@ -0,0 +1,427 @@
<?php
// Traditional Chinese language translation
// by: @lzh370 (GitHub)
// lzh370@qq.com
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>點擊圖標<br>求助 &amp;<br>實用信息</b>",
"server" => "伺服器",
"Server name, OS..." => "伺服器名稱, OS & IP:",
"Root" => "根目錄:",
"ICEcoder root" => "ICEcoder 根目錄:",
"PHP version" => "PHP 版本:",
"Date & time" => "日期 & 時間:",
"your device" => "你的設備",
"Browser" => "瀏覽器:",
"Your IP" => "你的 IP:",
"files" => "文件",
"Last 10 files..." => "最後10個打開的文件:",
"none" => "[none]",
"test suite" => "測試套件",
"Run unit tests" => "運行單元測試",
"dev mode" => "開發模式",
"Status" => "狀態",
"Using" => "使用",
"You can switch..." => "你可以在 lib/config__settings.php 中設置開發模式開關",
"results" => "結果"
),
"files" =>
array(
"Lock" => "鎖定",
"Refresh" => "刷新",
"ROOT" => "[ROOT]"
),
"index" =>
array(
"UPDATE INFO" => "更新信息",
"now available" => "現在可以",
"Your version is" => "你的版本是",
"Update now" => "現在更新",
"You have some..." => "你有一些未保存的更改",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "裝載中",
"Color picker" => "顔色選擇器",
"New File" => "新建文件",
"New Folder" => "新建文件夾",
"Upload File(s)" => "上傳文件",
"Paste" => "粘貼",
"Open" => "打開",
"Copy" => "複製",
"Duplicate" => "副本",
"Delete" => "刪除",
"Rename" => "重命名",
"View Webpage" => "預覽網頁",
"Download" => "下載",
"Properties" => "屬性",
"File" => "文件",
"Edit" => "編輯",
"Remote" => "遠程",
"Help" => "幫助",
"Save" => "保存",
"Save As" => "另存爲",
"Live Preview" => "實時預覽",
"Upload" => "上傳",
"Zip" => "壓縮",
"Print" => "打印",
"Fullscreen toggle" => "全屏切換",
"Logout" => "登出",
"Undo" => "撤銷",
"Redo" => "重做",
"Indent more" => "增加縮進",
"Indent less" => "减少縮進",
"Autocomplete" => "自動完成",
"Comment/Uncomment" => "注釋 / 清除注釋",
"Jump to Definition" => "跳轉指定行",
"Manual" => "手冊",
"Shortcuts" => "快捷鍵",
"Settings" => "選項",
"Search for selected" => "搜索選項",
"website" => "網站",
"Close all tabs" => "關閉所有選項卡",
"Alphabetize tabs" => "按字母順序排序選項卡",
// "Find" => "檢索",
// "in" => "in",
// "and" => "and",
// "replace" => "替換",
// "replace all" => "替換所有",
// "this document" => "當前文件",
// "open documents" => "打開的文件",
// "all files" => "所有文件",
// "all filenames" => "所有文件名",
"Turn on/off..." => "開啓/關閉代碼輔助",
"Code Assist" => "代碼輔助",
"Go to Line" => "轉到行",
"View" => "預覽",
"Bug reporting not active" => "錯誤報告沒有激活"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "檢索到:"
),
"file-control" =>
array(
"Sorry" => "抱歉",
"does not seem..." => "服務器上不存在",
"Sorry, could not..." => "抱歉, 不能獲取内容",
"Sorry, cannot create..." => "抱歉, 不能創建文件夾",
"Sorry, cannot copy" => "抱歉, 不能複製",
"into" => "",
"Uploaded file(s) OK" => "上傳文件完成",
"Sorry, cannot upload" => "抱歉, 不能上傳",
"Sorry, cannot upload..." => "抱歉, 演示模式不允許上傳文件",
"Sorry, cannot rename" => "抱歉, 不能重命名",
"Maybe public write..." => "也許父文件夾也需要寫入權限?",
"Sorry, cannot move" => "抱歉, 不能移動",
"Sorry, cannot save" => "抱歉, 不能保存",
"Sorry, cannot replace..." => "抱歉, 目標不能替換文本",
"Sorry, cannot change..." => "抱歉, 目標不能更改權限",
"Sorry, cannot delete..." => "抱歉, 不能刪除根級別ROOT",
"Sorry, cannot delete" => "抱歉, 不能刪除",
"Sorry, this file..." => "抱歉, 此文件已更改, 不能保存",
"Reload this file..." => "重新加載該文件, 你的版本複製到一個新文件?",
"There was a..." => "這些代碼還沒有準備好. 因此 ICEcoder 需要重新加載.",
"displayed at" => "顯示在",
"Enter filename to..." => "輸入文件名并保存到",
"That file exists..." => "該文件已存在, 要覆蓋嗎?",
"Saving" => "正在保存"
),
"get-branch" =>
array(
"There are no..." => "本地文件與 GitHub repo 沒有明顯差異. 切換回普通模式?",
"Sorry, there was..." => "抱歉, 這裏有一個錯誤, 代碼:",
"Your local folder..." => "你的本地文件夾是空的, 你是否想克隆"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "抱歉, 不能創建目錄到",
"Cannot update config..." => "不能更新配置文件. 請對",
"and try again" => "增加寫入權限, 并再次嘗試",
"saving github paths" => "正在保存 github 路徑...",
"github paths" => "github 路徑",
"Choose existing path" => "選擇現有路徑",
"Local path" => "本地路徑",
"Remote GitHub path" => "遠程 GitHub 路徑",
"Choose" => "選擇",
"Set local and..." => "設置本地路徑和遠程路徑需要去除空格",
"Update" => "更新",
"Add new path" => "增加新路徑",
"Add" => "增加",
"Usage Info" => "使用方法",
"Enter relative local..." => "輸入本地相對路徑 (/server/myfiles) 和 GitHub 絕對路徑 (https://github.com/user/repo 或 https://github.com/user/repo/tree/branch 各分隻), 按照示例. 完成后你就建立了這兩個源路徑, 它應該成對數存在.",
"You can then..." => "你可以選擇一個路徑作爲 ICEcoder 的根路徑.",
"The file manager..." => "文件管理器右側會顯示一個新的GitHub圖標, 您可以點擊執行, 會自動校驗并顯示本地與github源之間的差異. 這些差異可以提交和推送到GitHub上的遠程路徑或克隆到您的本地路徑, 用來同步您的文檔.",
"If you want..." => "如果您想設置一個根路徑, 可以在 幫助 > 設置窗口 中進行設置."
),
"github" =>
array(
"Sorry, you do..." => "抱歉, 您的服務器沒有啓用 OpenSSL 的 PHP 實例, 因此 https 目前不可用. GitHub 的數據傳輸必須要用 https 連接, 請修改 php.ini 設置, 重啓您的服務器并重新嘗試"
),
"headers" =>
array(
"Bad CSRF token..." => "錯誤的 CSRF token. 請在 https://github.com/mattpass/ICEcoder 報告錯誤信息, 以便我們修復它."
),
"help" =>
array(
"shortcuts" => "快捷鍵",
"Within document" => "文檔",
"On Tabs" => "選項卡",
"Within file manager" => "文件管理器",
"Anywhere" => "其他",
"Space" => "空格",
"Click" => "單擊",
"or" => "",
"Left click" => "左鍵單擊",
"Middle click" => "中鍵單擊",
"Double click tap..." => "雙擊 / 手指點擊 (移動端)",
"Right click" => "右鍵單擊",
"Middle scrollwheel" => "中間滾輪滾動",
"Drag" => "拖動",
"Autocomplete add snippet" => "自動完成 / 添加片段",
"Multiple select" => "多選",
"Move line up" => "向上移動行",
"Move line down" => "向下移動行",
"Duplicate lines" => "復制行",
"Remove lines" => "刪除行",
"Insert line before" => "前插入行",
"Insert line after" => "后插入行",
"Search for selected" => "搜索選擇",
"Jump to definition" => "跳轉到 / 跳轉回",
"Comment uncomment" => "注釋 / 清楚注釋",
"Insert tab indent" => "插入tab / 插入選擇",
"Wrap with div" => "封裝 &lt;div&gt;",
"Wrap with span" => "封裝 &lt;span&gt;",
"Wrap unwrap p" => "封裝 / 撤銷封裝 &lt;p&gt;",
"Wrap unwrap a" => "封裝 / 撤銷封裝 &lt;a&gt;",
"Wrap unwrap b" => "封裝 / 撤銷封裝 &lt;b&gt;",
"Wrap unwrap i" => "封裝 / 撤銷封裝 &lt;i&gt;",
"Wrap unwrap strong" => "封裝 / 撤銷封裝 &lt;strong&gt;",
"Wrap unwrap em" => "封裝 / 撤銷封裝 &lt;em&gt;",
"Wrap unwrap li" => "封装 / 撤销封装 &lt;li&gt;",
"Wrap unwrap h1..." => "封裝 / 撤銷封裝 &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "換行 &lt;br&gt;",
"Close tab" => "關閉選項卡",
"Select file folder" => "選擇文件 / 文件夾",
"Open file" => "打開文件",
"Range select" => "範圍選擇",
"Options for selected" => "所選的選項",
"Delete selected" => "刪除已選",
"Next previous tab" => "下一個 / 上一個 選項卡",
"Next tab" => "下一個選項卡",
"Previous tab" => "上一個選項卡",
"New tab" => "新建選項卡",
"Close current tab" => "關閉當前選項卡",
"Open file prompt" => "打開文件的提示",
"Find" => "檢索",
"Focus on Go..." => "光標定位到轉到行的輸入框",
"Save" => "保存",
"Save as" => "另存爲...",
"View webpage" => "預覽網頁",
"Contract expand file..." => "收縮 / 擴展文件管理器",
"Fold unfold current..." => "摺叠 / 展開當前行",
"Refocus on document" => "光標重新聚焦到文檔",
"Cancel tasks" => "取消任务"
),
"ice-coder" =>
array(
"No text selected..." => "搜索中沒有選中的文件",
"Creating Folder" => "正在創建文件夾",
"Sorry you can..." => "抱歉, 衹能同時打開100個文件!",
"Opening File" => "正在打開文件",
"Enter relative file..." => "輸入本地相對路徑 (前綴 /) 或遠程 URL",
"Getting" => "正在獲取",
"Please enter the..." => "請輸入新的名稱爲",
"Renaming to" => "正在重命名",
"Moving to" => "正在移動到",
"Deleting File" => "正在刪除文件",
"Pasting File" => "正在粘貼文件",
"Sorry cannot paste..." => "抱歉, 無法粘貼到根路徑",
"Nothing to paste..." => "粘貼失敗, 請先複製一個文件 / 文件夾!",
"Replacing text in" => "正在替換文本",
"Cancelled tasks" => "取消任務",
"Open previous files" => "打開以前的文件?",
"Please enter your..." => "請輸入您的 GitHub token (允許使用個人令牌或客戶端令牌). 可以查看 Github Auth Token 的幫助 > 更多信息在 幫助 > 設置窗口",
"This will compare..." => "將比較和顯示您的本地目錄和 GitHub repo 之間的差異. 確定嗎?",
"Please note for..." => "請注意: 需要更新才能工作, 您需要爲所有 ICEcoder 文件和文件夾設置寫如何刪除權限. 如果您需要恢復 ICEcoder 到這個版本, 您可以在 /tmp 目錄找到它們. 點擊 OK 繼續使用自動升級或點擊 cancel 訪問 ICEcoder 官方網站, 您也可以到 GitHub 的項目首頁下載 zip 來手動進行更新.",
"You can start..." => "您可以在 幫助 > 設置中啓動錯誤報告",
"Error cannot find..." => "錯誤: 無法找到和進入錯誤日志文件路徑",
"No new errors..." => "沒有新的錯誤被找到",
"You have made..." => "您已做的更改未保存。您確定要關閉它而不保存嗎?",
"Close all tabs" => "是否關閉所有選項卡?"
),
"login" =>
array(
"set password" => "設置密碼",
"login" => "登錄",
"To disable registration..." => "要禁用注冊模式, 請進入選項或打開文件 lib/config___settings.php 并更改 enableRegistration 爲 false , 并重新載入本頁面",
"Registration mode enabled" => "注冊模式已啓用",
"auto-check for updates" => "自動檢測更新",
"To put into..." => "要禁用多用戶模式, 請進入選項或打開文件 lib/config___settings.php 并更改 multiUser 爲 true , 并重新載入本頁面",
"multi-user" => "多用戶"
),
"multiple-results" =>
array(
"rename all" => "重命名所有",
"replace all" => "全部替換",
"document" => "文檔",
"Found" => "找到",
"times" => "時間",
"replace" => "替換",
"file folder" => "文件 / 文件夾",
"rename to" => "重命名爲",
"rename" => "重命名",
"file" => "文件",
"No matches found" => "沒有找到匹配",
"selected" => "選擇",
"found in" => "查詢結果在",
"Replaced" => "已替換"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder 需要重新加載, 這個插件才可以使用。現在刷新嗎?",
"saving plugins" => "正在保存插件...",
"Cannot update config..." => "不能更新配置文件. 請爲",
"and try again" => "設置寫入權限并刷新重試",
"couldnt delete dir" => "不能刪除目錄",
"couldnt delete file" => "不能刪除文件",
"plugins" => "插件",
"Guide to writing..." => "編寫插件指南",
"Manage Installed" => "管理已安裝",
"URL" => "URL",
"Target" => "目標",
"Timer" => "定時器",
"Update" => "更新",
"Install" => "安裝",
"Uninstall" => "卸載",
"Reload after install..." => "安裝后需要刷新"
),
"properties" =>
array(
"properties" => "屬性",
"Size" => "尺寸",
"Modified" => "修改",
"Last access" => "最近訪問",
"Type" => "類型",
"Readable Writeable" => "可讀 / 可寫",
"Relative path" => "相對路徑",
"Absolute path" => "絕對路徑",
"Contains" => "包含",
"Permissions" => "權限",
"Owner" => "所有者",
"Group" => "",
"Public" => "公衆",
"Read" => "讀取",
"Write" => "寫入",
"Execute" => "執行",
"Change to" => "更改爲",
"update" => "更新"
),
"settings-common" =>
array(
"Your document does..." => "你的文檔不是 UTF-8 編碼, 它將被轉換"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "不能更新配置文件. 請爲",
"and try again" => "增加寫入權限并再次嘗試"
),
"settings-screen" =>
array(
"settings" => "設置",
"version" => "版本",
"website" => "網站",
"git" => "git",
"codemirror dir" => "codemirror 目錄",
"codemirror version" => "codemirror 版本",
"file manager root" => "文件管理器的根目錄 ROOT",
"Free to use..." => "您可以免費使用它, 無論商業與否, 衹需讓我知道任何很酷的或有定製的:)同樣我們無任何責任和任何擔保, 使用所有的責任都是你的. 很多個人和公司爲 ICEcoder 作出過貢獻, 在此篇幅有限無法一一列舉, 請訪問貢獻者詳細列表",
"functionality" => "功能",
"check for updates..." => "啓動時檢查更新",
"auto open last..." => "啓動時自動載入最后打開的文件",
"when finding in..." => "在查找文件時, 排除",
"assisting" => "輔助",
"code assist" => "代碼輔助",
"visible tabs" => "縮進綫可見",
"locked nav" => "鎖定導航",
"tag wrapper command" => "標簽封裝命令",
"auto-complete on" => "打開自動完成",
"security" => "安全",
"new password" => "新密碼",
"8 chars min" => "至少8個字符",
"confirm password" => "確認密碼",
"banned files/folders" => "禁止文件 / 文件夾",
"banned paths" => "禁止路徑",
"ip addresses" => "ip 地址",
"Slash prefixed comma..." => "斜綫前綴, 以半角逗號分隔",
"Comma delimited" => "以半角逗號分隔",
"style" => "樣式",
"theme" => "主題",
"line wrapping" => "換行",
"indent type" => "縮進類型",
"indent size" => "縮進大小",
"font size" => "字體大小",
"auto indent" => "auto indent",
"layout" => "佈局",
"plugin panel aligned" => "插件版對齊",
"file manager" => "文件管理器",
"root" => "root",
"Slash prefixed" => "斜綫前綴",
"bug reporting" => "報告錯誤",
"check in files" => "檢查文件",
"every" => "任何",
"secs getting last" => "秒, 最後得到",
"lines" => "",
"multi-user" => "多用戶",
"Make sure you..." => "確保你沒有把自己鎖了",
"Registration" => "啓用注冊",
"auth token" => "auth token",
"Required to get..." => "如需要得到差異列表, 提交您 GitHub 上托管的 repo 等. 如果你還沒有一個, 你可以使用:".PHP_EOL.PHP_EOL.
"- 個人令牌訪問 (https://help.github.com/articles/creating-an-access-token-for-command-line-use), 或".PHP_EOL.
"- 完整的客戶端/機密雙令牌 (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"我們不建議您在此處設置令牌, 更安全的方式是當 ICEcoder 要求輸入時將其隻保存在會話中.".PHP_EOL.PHP_EOL.
"然而, 如果你在一個信賴和安全的環境下工作, 把它設置在這裏是更有效的.",
"Sorry cannot commit..." => "抱歉, 在演示模式下不能提交設置",
"update" => "更新"
),
"settings-update" =>
array(
"Cannot update config..." => "不能更新配置文件. 請爲",
"and try again" => " 增加寫入權限并重新嘗試",
"and press refresh" => " 增加寫入權限并重新嘗試"
),
"updater" =>
array(
"Update appears to..." => "更新似乎是成功的"
)
);
?>

429
lang/dutch.php Normal file
View File

@@ -0,0 +1,429 @@
<?php
// Dutch language translation
// Door: Julian Kaagman
// @dutchwaters (GitHub)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
// Special chars: http://www.ascii.cl/htmlcodes.htm
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<strong>Klik op de icoontjes<br>voor hulp &amp;<br>gebruiks info</strong>",
"server" => "server",
"Server name, OS..." => "Server naam, besturingssysteem & IP:",
"Root" => "Root:",
"ICEcoder root" => "ICEcoder root:",
"PHP version" => "PHP versie:",
"Date & time" => "Datum & tijd:",
"your device" => "Uw apparaat",
"Browser" => "Browser:",
"Your IP" => "Uw IP:",
"files" => "bestanden",
"Last 10 files..." => "Laatste 10 geopende bestanden:",
"none" => "[none]",
"test suite" => "test suite",
"Run unit tests" => "Voer unit tests uit",
"dev mode" => "Ontwikkelaars modus",
"Status" => "Status",
"Using" => "Gebruikt",
"You can switch..." => "U kunt de ontwikkelaars modus aan/uit zetten
in lib/config__settings.php",
"results" => "resultaten"
),
"files" =>
array(
"Lock" => "Vergrendelen",
"Refresh" => "Vernieuwen",
"ROOT" => "[ROOT]"
),
"index" =>
array(
"UPDATE INFO" => "UPDATE INFO",
"now available" => "nu beschikbaar",
"Your version is" => "Uw versie is",
"Update now" => "Nu updaten",
"You have some..." => "Er zijn wijzigingen die niet opgeslagen zijn",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "bezig",
"Color picker" => "Kleuren kiezer",
"New File" => "Nieuw bestand",
"New Folder" => "Nieuwe map",
"Upload File(s)" => "Upload bestand(en)",
"Paste" => "Plakken",
"Open" => "Open",
"Copy" => "Kopi&euml;ren",
"Duplicate" => "Dupliceren",
"Delete" => "Verwijderen",
"Rename" => "Hernoemen",
"View Webpage" => "Bekijk webpagina",
"Download" => "Download",
"Properties" => "Eigenschappen",
"File" => "Bestand",
"Edit" => "Bewerken",
"Remote" => "Extern",
"Help" => "Help",
"Save" => "Opslaan",
"Save As" => "Opslaan als",
"Live Preview" => "Voorbeeld",
"Upload" => "Upload",
"Zip" => "Zip",
"Print" => "Print",
"Fullscreen toggle" => "Schakelen volledig scherm",
"Logout" => "Uitloggen",
"Undo" => "Ongedaan maken",
"Redo" => "Opnieuw",
"Indent more" => "Rechts inspringen",
"Indent less" => "Links verspringen",
"Autocomplete" => "Automatisch aanvullen",
"Comment/Uncomment" => "Commentaar maken",
"Jump to Definition" => "Spring naar definitie",
"Manual" => "Handleiding",
"Shortcuts" => "Snelkoppeling",
"Settings" => "Opties",
"Search for selected" => "Zoek naar geselecteerd",
"website" => "website",
"Close all tabs" => "Sluit alle tabbladen",
"Alphabetize tabs" => "Sorteer tabbladen",
// "Find" => "Zoek",
// "in" => "in",
// "and" => "en",
// "replace" => "vervangen",
// "replace all" => "alles vervangen",
// "this document" => "dit document",
// "open documents" => "open documenten",
// "all files" => "alle bestanden",
// "all filenames" => "alle bestandsnamen",
"Turn on/off..." => "Schakel codehulp aan/uit",
"Code Assist" => "Codehulp",
"Go to Line" => "Ga naar regel",
"View" => "Beeld",
"Bug reporting not active" => "Bug rapportage niet actief"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Gevonden in:"
),
"file-control" =>
array(
"Sorry" => "Sorry",
"does not seem..." => "bestaat niet op de server",
"Sorry, could not..." => "Sorry, kan geen gegevens ophalen van",
"Sorry, cannot create..." => "Sorry, kan geen map aanmaken op",
"Sorry, cannot copy" => "Sorry, kan niet het volgende niet kopi&euml;ren",
"into" => "naar",
"Uploaded file(s) OK" => "Ge&uuml;ploade bestand(en)",
"Sorry, cannot upload" => "Sorry, kan niet uploaden",
"Sorry, cannot upload..." => "Sorry, kan niet uploaden in de demo modus",
"Sorry, cannot rename" => "Sorry, kan niet hernoemen",
"Maybe public write..." => "Misschien zijn er publieke schrijfrechten nodig voor deze, of de bovenliggende map?",
"Sorry, cannot move" => "Sorry, kan niet worden verplaatst",
"Sorry, cannot save" => "Sorry, kan niet opslaan",
"Sorry, cannot replace..." => "Sorry, Kan geen tekst vervangen in",
"Sorry, cannot change..." => "Sorry, kan de rechten niet wijzigen voor",
"Sorry, cannot delete..." => "Sorry, kan de root level niet verwijderen",
"Sorry, cannot delete" => "Sorry, kan niet verwijderd worden",
"Sorry, this file..." => "Sorry, het bestand is gewijzigd, maar kan niet worden opgeslagen",
"Reload this file..." => "Vernieuw dit bestand en kopieer de huidige versie naar een nieuw bestand?",
"There was a..." => "Er was een technisch probleem, mogelijk was er iets niet gereed. ICEcodeer heeft bestandsbeheer opnieuw geladen.",
"displayed at" => "weergegeven op",
"Enter filename to..." => "Voer een bestandsnaam in om het op te slaan op",
"That file exists..." => "Dit bestand bestaat al, overschrijven?",
"Saving" => "Opslaan"
),
"get-branch" =>
array(
"There are no..." => "Er zijn geen verschillen aangetroffen tussen de lokale en de Github repo. Wilt u terug schakelen naar de normale modus?",
"Sorry, there was..." => "Sorry, er is een fout opgetreden, foutcode:",
"Your local folder..." => "Uw lokale map is leeg, wilt u de inhoud klonen"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "Sorry, kan geen map aanmaken op",
"Cannot update config..." => "Kan het configuratie bestand niet updaten. Zet alstublieft eerst publieke schrijfrechten aan",
"and try again" => "en probeer het opnieuw",
"saving github paths" => "opslaan Github paden...",
"github paths" => "Github paden",
"Choose existing path" => "Kies een bestaand pad",
"Local path" => "Lokaal pad",
"Remote GitHub path" => "Extern Github pad",
"Choose" => "Kies",
"Set local and..." => "Maak het lokale en externe pad leeg, om te verwijderen",
"Update" => "Update",
"Add new path" => "Nieuw pad toevoegen",
"Add" => "Toevoegen",
"Usage Info" => "Gebruiks Info:",
"Enter relative local..." => "Voer relatieve lokale paden (bv /server/mijnbestanden) en absolute Github paden (bv https://github.com/user/repo of https://github.com/user/repo/tree/branch voor vertakkingen (branches)), zoals het voorbeeld. Als je dit doet worden de bron paden op beide locaties gevestigd als een paar.",
"You can then..." => "You can then choose a path pair and this then becomes your new root path in ICEcoder.",
"The file manager..." => "The file manager then displays a new GitHub icon, which you can click on to perform and show a diff check between the 2 sources. These diffs can then be committed and pushed to the remote path at GitHub or cloned to your local path, to sync your files.",
"If you want..." => "If you want to set another root path, this can be done in the Settings screen."
),
"github" =>
array(
"Sorry, you do..." => "Sorry, you do not appear to have OpenSSL loaded on your PHP instance, so https is not available. This is required for GitHub data transfer, please amend php.ini settings, restart your server and try again"
),
"headers" =>
array(
"Bad CSRF token..." => "Foute CSRF token. Graag de fout informatie delen op https://github.com/mattpass/ICEcoder zodat het kan worden opgelost."
),
"help" =>
array(
"shortcuts" => "snelkoppelingen",
"Within document" => "Binnen het document",
"On Tabs" => "Op Tabs",
"Within file manager" => "Binnen bestandsbeheer",
"Anywhere" => "Overal",
"Space" => "Spatie",
"Click" => "Klik",
"or" => "of",
"Left click" => "Linker muisklik",
"Middle click" => "Middelste muisklik",
"Double click tap..." => "Dubbel klikken / tap (mobiele apparatuur)",
"Right click" => "Rechter muisklik",
"Middle scrollwheel" => "Midden scrollwiel",
"Drag" => "Slepen",
"Autocomplete add snippet" => "Aanvullen / toevoegen snippet",
"Multiple select" => "Multi selecteren",
"Move line up" => "Verplaats regel omhoog",
"Move line down" => "Verplaats regel omlaag",
"Duplicate lines" => "Kopieer regel(s)",
"Remove lines" => "Verwijder regel(s)",
"Insert line before" => "Regel invoegen voor",
"Insert line after" => "Regel invoegen na",
"Search for selected" => "Zoek naar geselecteerd",
"Jump to definition" => "Spring naar definitie / spring terug",
"Comment uncomment" => "Commentaar (ongedaan) maken",
"Insert tab indent" => "Invoegen tab / verspringen geselecteerd",
"Wrap with div" => "Omhullen met &lt;div&gt;",
"Wrap with span" => "Omhullen met &lt;span&gt;",
"Wrap unwrap p" => "Omhullen / onthullen met &lt;p&gt;",
"Wrap unwrap a" => "Omhullen / onthullen met &lt;a&gt;",
"Wrap unwrap b" => "Omhullen / onthullen met &lt;b&gt;",
"Wrap unwrap i" => "Omhullen / onthullen met &lt;i&gt;",
"Wrap unwrap strong" => "Omhullen / onthullen met &lt;strong&gt;",
"Wrap unwrap em" => "Omhullen / onthullen met &lt;em&gt;",
"Wrap unwrap li" => "Omhullen / onthullen met &lt;li&gt;",
"Wrap unwrap h1..." => "Omhullen / onthullen met &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "Eindig regel met &lt;br&gt;",
"Close tab" => "Sluit tab",
"Select file folder" => "Selecteer bestand / map",
"Open file" => "Open bestand",
"Range select" => "Selecteer bereik",
"Options for selected" => "Opties voor geselecteerd",
"Delete selected" => "Verwijder geselecteerde",
"Next previous tab" => "Volgende / vorige tab",
"Next tab" => "Volgende tab",
"Previous tab" => "Vorige tab",
"New tab" => "Nieuw tab",
"Close current tab" => "Sluit huidige tab",
"Open file prompt" => "Open bestands prompt",
"Find" => "Zoek",
"Focus on Go..." => "Focus op ga naar regel invoer",
"Save" => "Opslaan",
"Save as" => "Opslaan als...",
"View webpage" => "Bekijk webpagina",
"Contract expand file..." => "Inklappen / uitklappen bestandsbeheer",
"Fold unfold current..." => "Vouwen / uitvouwen huidige regel",
"Refocus on document" => "Herfocus op document",
"Cancel tasks" => "Annuleer taken"
),
"ice-coder" =>
array(
"No text selected..." => "Geen tekst geselecteerd om te zoeken",
"Creating Folder" => "Aanmaken map",
"Sorry you can..." => "Sorry, je kan maximaal 100 bestanden open hebben staan!",
"Opening File" => "Openen bestand",
"Enter relative file..." => "Geef relatieve bestands pad (voorafgaand door een slash) of een externe URL",
"Getting" => "Ophalen",
"Please enter the..." => "Voer de nieuwe naam in voor",
"Renaming to" => "Hernoemen naar",
"Moving to" => "Verplaatsen naar",
"Deleting File" => "Bestand verwijderen",
"Pasting File" => "Bestand plakken",
"Sorry cannot paste..." => "Sorry, kan niet de gehele root plakken",
"Nothing to paste..." => "Er is niets om te plakken, kopieer eerst een bestand of map!",
"Replacing text in" => "Wijzig de tekst in",
"Cancelled tasks" => "Geannuleerde taken",
"Open previous files" => "Open voorgaande bestand(en)?",
"Please enter your..." => "Please enter your GitHub token (either personal access token or client/secret pair token). See tooltip next to Github Auth Token on Help > Settings screen for more info",
"This will compare..." => "This will compare and show a diff view between your local dir and the repo. OK?",
"Please note for..." => "Let op: om de update goed te laten doorvoeren, moet je schrijfrechten hebben op alle bestanden en mappen van ICEcoder. Moet je deze versie van ICEcoder herstellen, dan vind je die in de map /tmp. Klik op ok om door te gaan met automatisch updaten, of druk op annuleren om af te breken. Voor een handmatige update kun je het zip bestand van de ICEcoder website downloaden.",
"You can start..." => "U kunt bug rapporteren aanzetten in: Help > Settings",
"Error cannot find..." => "Fout: kan geen toegang krijgen of de bestands paden vinden",
"No new errors..." => "Geen nieuwe fouten gevonden",
"You have made..." => "Er zijn wijzigingen aangetroffen. Wilt u verder gaan zonder op te slaan?",
"Close all tabs" => "Sluit alle tabbladen?"
),
"login" =>
array(
"set password" => "sla wachtwoord op",
"login" => "login",
"To disable registration..." => "Om de registratie modus uit te zetten, open het menu opties of open lib/config___settings.php en wijzig enableRegistration naar false",
"Registration mode enabled" => "Registratie modus aan",
"auto-check for updates" => "automatisch controleren op updates",
"To put into..." => "Om de multi-user modus te gebruiken, open het menu opties of open lib/config___settings.php en verander multiUser naar true",
"multi-user" => "multi-user"
),
"multiple-results" =>
array(
"rename all" => "hernoem alles",
"replace all" => "vervang alles",
"document" => "document",
"Found" => "Gevonden",
"times" => "keer",
"replace" => "vervang",
"file folder" => "bestand/map",
"rename to" => "hernoemen naar",
"rename" => "hernoemen",
"file" => "bestand",
"No matches found" => "Geen overeenkomsten gevonden",
"selected" => "geselecteerd",
"found in" => "gevonden in",
"Replaced" => "Vervangen"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder moet opnieuw worden geladen om deze plug-in te gebruiken. Nu opnieuw laden?",
"saving plugins" => "opslaan plug-ins...",
"Cannot update config..." => "Kan het configuratie bestand niet updaten. Zet alstublieft eerst publieke schrijfrechten aan",
"and try again" => "en probeer het opnieuw",
"couldnt delete dir" => "kan de map niet verwijderen",
"couldnt delete file" => "kan bestand niet verwijderen",
"plugins" => "plug-ins",
"Guide to writing..." => "Gids om plug-ins te schrijven",
"Manage Installed" => "Beheer ge&Iuml;nstalleerd",
"URL" => "URL",
"Target" => "Doel",
"Timer" => "Timer",
"Update" => "Update",
"Install" => "Installeren",
"Uninstall" => "De&Iuml;nstalleren",
"Reload after install..." => "Opnieuw laden na installatie vereist"
),
"properties" =>
array(
"properties" => "eigenschappen",
"Size" => "Groote",
"Modified" => "Aangepast",
"Last access" => "Laatst geopend",
"Type" => "Type",
"Readable Writeable" => "Leesbaar / Schrijfbaar",
"Relative path" => "Relatief pad",
"Absolute path" => "Absoluut pad",
"Contains" => "Bevat",
"Permissions" => "Rechten",
"Owner" => "Eigenaar",
"Group" => "Groep",
"Public" => "Publiek",
"Read" => "Lezen",
"Write" => "Schrijven",
"Execute" => "Uitvoeren",
"Change to" => "Veranderen naar",
"update" => "update"
),
"settings-common" =>
array(
"Your document does..." => "Het bleek dat uw bestand niet gebruik maakte van UTF-8 codering, dus is het geconverteerd"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "Kan het configuratie bestand niet updaten. Zet alstublieft eerst publieke schrijfrechten aan",
"and try again" => "en probeer het opnieuw"
),
"settings-screen" =>
array(
"settings" => "instellingen",
"version" => "versie",
"website" => "website",
"git" => "git",
"codemirror dir" => "codemirror dir",
"codemirror version" => "codemirror versie",
"file manager root" => "bestandsbeheer root",
"Free to use..." => "Vrij voor eigen gebruik, commercieel of persoonlijk. :)<br><br>Wij zijn niet aansprakelijk en bieden geen garantie, gebruik op eigen risico.<br><br>Een hoop fantastische mensen, en bedrijven hebben meegeholpen aan de ontwikkeling van ICEcoder waarvoor bedankt. Zie wie er allemaal heeft bijgedragen op",
"functionality" => "functionaliteit",
"check for updates..." => "check voor updates bij laden",
"auto open last..." => "automatisch openen laatst geopende bestanden na inloggen",
"when finding in..." => "when finding in files, exclude",
"assisting" => "assisteren",
"code assist" => "codehulp",
"visible tabs" => "zichtbare tabs",
"locked nav" => "vergrendelde nav",
"tag wrapper command" => "tag wrapper command",
"auto-complete on" => "automatisch aanvullen",
"security" => "beveiliging",
"new password" => "nieuw wachtwoord",
"8 chars min" => "minimaal 8 tekens",
"confirm password" => "herhaal wachtwoord",
"banned files/folders" => "uitgesloten bestanden/mappen",
"banned paths" => "uitgesloten paden",
"ip addresses" => "ip adressen",
"Slash prefixed comma..." => "Slash prefixed, komma gescheiden",
"Comma delimited" => "komma gescheiden",
"style" => "style",
"theme" => "thema",
"line wrapping" => "regel omslag",
"indent type" => "inspring type",
"indent size" => "inspring size",
"font size" => "lettergrootte",
"auto indent" => "auto indent",
"layout" => "lay-out",
"plugin panel aligned" => "plug-in paneel positie",
"file manager" => "bestandsbeheer",
"root" => "root",
"Slash prefixed" => "Slash prefixed",
"bug reporting" => "bug rapportage",
"check in files" => "check in bestanden",
"every" => "elke",
"secs getting last" => "seconde, verstuur laatste",
"lines" => "regels",
"multi-user" => "multi-user",
"Make sure you..." => "Zorg ervoor dat je niet jezelf buitensluit",
"Registration" => "Registratie",
"auth token" => "auth token",
"Required to get..." => "Required to get diffs, commit to your GitHub hosted repo etc. If you do not have one, you can use a:".PHP_EOL.PHP_EOL.
"- personal access token (https://help.github.com/articles/creating-an-access-token-for-command-line-use), or".PHP_EOL.
"- full client/secret pair token (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"It is not recommended you set your token here however and is more secure to enter it when requested by ICEcoder as that will keep it in session only.".PHP_EOL.PHP_EOL.
"However, if you work in a trusted and secure environment, it is more efficient to set it here.",
"Sorry cannot commit..." => "Sorry, cannot commit settings in demo mode",
"update" => "update"
),
"settings-update" =>
array(
"Cannot update config..." => "Kan het configuratie bestand niet updaten. Zet alstublieft eerst publieke schrijfrechten aan",
"and try again" => "probeer het opnieuw",
"and press refresh" => "en druk vernieuwen"
),
"updater" =>
array(
"Update appears to..." => "Update lijkt succesvol te zijn verlopen"
)
);
?>

462
lang/english.php Normal file
View File

@@ -0,0 +1,462 @@
<?php
// English language translation
// by: @mattpass (GitHub)
// @mattpass (Twitter)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"server" => "server",
"Server name, OS..." => "Server name, OS & IP:",
"Root" => "Root:",
"ICEcoder root" => "ICEcoder root:",
"PHP version" => "PHP version:",
"Date & time" => "Date & time:",
"your device" => "your device",
"Browser" => "Browser:",
"Your IP" => "Your IP:",
"trial remaining" => "trial remaining",
"days left" => "days left",
"files" => "files",
"Last 10 files..." => "Last 10 files opened:",
"none" => "[none]",
"test suite" => "test suite",
"Run unit tests" => "Run unit tests",
"dev mode" => "dev mode",
"Status" => "Status",
"Using" => "Using",
"You can switch..." => "You can switch dev mode on/off in lib/config__settings.php"
),
"files" =>
array(
"Lock" => "Lock",
"Refresh" => "Refresh",
"Plugins" => "Plugins",
"ROOT" => "[ROOT]"
),
"index" =>
array(
"UPDATE INFO" => "UPDATE INFO",
"now available" => "now available",
"Your version is" => "Your version is",
"Update now" => "Update now",
"You have some..." => "You have some unsaved changes",
"Are you sure..." => "Are you sure you want to close?",
"working" => "working",
"Color picker" => "Color picker",
"Plugins Manager" => "Plugins Manager",
"New File" => "New File",
"New Folder" => "New Folder",
"Upload File(s)" => "Upload File(s)",
"Paste" => "Paste",
"Open" => "Open",
"Copy" => "Copy",
"Duplicate" => "Duplicate",
"Delete" => "Delete",
"Rename" => "Rename",
"View Webpage" => "View Webpage",
"Download" => "Download",
"Properties" => "Properties",
"File" => "File",
"Edit" => "Edit",
"Source" => "Source",
"Help" => "Help",
"Save" => "Save",
"Save As" => "Save As",
"Live Preview" => "Live Preview",
"Upload" => "Upload",
"Zip" => "Zip",
"Print" => "Print",
"Fullscreen toggle" => "Fullscreen toggle",
"Logout" => "Logout",
"Undo" => "Undo",
"Redo" => "Redo",
"Indent more" => "Indent more",
"Indent less" => "Indent less",
"Autocomplete" => "Autocomplete",
"Comment/Uncomment" => "Comment/Uncomment",
"Jump to Definition" => "Jump to Definition",
"Manual" => "Manual",
"Shortcuts" => "Shortcuts",
"Settings" => "Settings",
"Search for selected" => "Search for selected",
"website" => "website",
"Close all tabs" => "Close all tabs",
"Alphabetize tabs" => "Alphabetize tabs",
"Find" => "Find",
"in" => "in",
"and" => "and",
"replace" => "replace",
"replace all" => "replace all",
"this document" => "this document",
"open documents" => "open documents",
"all files" => "all files",
"all filenames" => "all filenames",
"Turn on/off..." => "Turn on/off code assist",
"Code Assist" => "Code Assist",
"Go to Line" => "Go to Line",
"View" => "View",
"Bug reporting not active" => "Bug reporting not active",
"Single pane" => "Single pane",
"Diff pane also" => "Diff pane also"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Found in:"
),
"file-control" =>
array(
"Sorry, bad filename..." => "Sorry, bad filename provided. Check the dev tools console for more info?",
"Sorry" => "Sorry",
"does not seem..." => "does not seem to exist on the server",
"Sorry, could not..." => "Sorry, could not get contents of",
"Sorry, cannot create..." => "Sorry, cannot create folder at",
"Sorry, cannot copy" => "Sorry, cannot copy",
"into" => "into",
"Uploaded file(s) OK" => "Uploaded file(s) OK",
"Sorry, cannot upload" => "Sorry, cannot upload",
"Sorry, cannot upload..." => "Sorry, cannot upload whilst in demo mode",
"Sorry, cannot rename" => "Sorry, cannot rename",
"Maybe public write..." => "Maybe public write permissions needed on this or parent folder?",
"Sorry, cannot move" => "Sorry, cannot move",
"Sorry, cannot save" => "Sorry, cannot save",
"Sorry, cannot replace..." => "Sorry, cannot replace text in",
"Sorry, cannot change..." => "Sorry, cannot change permissions on",
"Sorry, cannot delete..." => "Sorry, cannot delete the root level",
"Sorry, cannot delete" => "Sorry, cannot delete",
"Sorry, this file..." => "Sorry, this file has changed, cannot save",
"Reload this file..." => "Reload this file and copy your version to a diff pane?",
"There was a..." => "There was a tech hiccup, likely something was not quite ready. So ICEcoder reloaded its file control again.",
"displayed at" => "displayed at",
"Enter filename to..." => "Enter filename to save at",
"That file exists..." => "That file exists already, overwrite?",
"Saving" => "Saving"
),
"get-branch" =>
array(
"There are no..." => "There are no differences between the local and GitHub repo. Switch back to regular mode?",
"Sorry, there was..." => "Sorry, there was an error, code:",
"Your local folder..." => "Your local folder is empty, would you like to clone"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "Sorry, cannot create folder at",
"Cannot update config..." => "Cannot update config file. Please set public write permissions on",
"and try again" => "and try again",
"saving github paths" => "saving github paths...",
"github paths" => "github paths",
"Choose existing path" => "Choose existing path",
"Local path" => "Local path",
"Slash prefixed" => "Slash prefixed",
"Remote GitHub path" => "Remote GitHub path",
"Absolute URL beginning..." => "Absolute URL, beginning https://github.com",
"Choose" => "Choose",
"Set local and..." => "Set local and remote path to blank to remove",
"Update" => "Update",
"Add new path" => "Add new path",
"Add" => "Add",
"Usage Info" => "Usage Info:",
"Enter relative local..." => "Enter relative local paths (eg /server/myfiles) and absolute GitHub paths (eg https://github.com/user/repo or https://github.com/user/repo/tree/branch for branches), as per the examples. With this done you have established the source paths at both locations, as a pair.",
"You can then..." => "You can then choose a path pair and this then becomes your new root path in ICEcoder.",
"The file manager..." => "The file manager then displays a new GitHub icon, which you can click on to perform and show a diff check between the 2 sources. These diffs can then be committed and pushed to the remote path at GitHub or cloned to your local path, to sync your files.",
"If you want..." => "If you want to set another root path, this can be done in the Settings screen."
),
"github" =>
array(
"Sorry, you do..." => "Sorry, you do not appear to have OpenSSL loaded on your PHP instance, so https is not available. This is required for GitHub data transfer, please amend php.ini settings, restart your server and try again"
),
"headers" =>
array(
"Bad CSRF token..." => "Bad CSRF token. Please report the error info at https://github.com/mattpass/ICEcoder so it can be fixed."
),
"help" =>
array(
"shortcuts" => "shortcuts",
"Within document" => "Within document",
"On Tabs" => "On Tabs",
"Within file manager" => "Within file manager",
"Anywhere" => "Anywhere",
"Space" => "Space",
"Click" => "Click",
"or" => "or",
"Left click" => "Left click",
"Middle click" => "Middle click",
"Double click tap..." => "Double click / tap (mobile)",
"Right click" => "Right click",
"Middle scrollwheel" => "Middle scrollwheel",
"Drag" => "Drag",
"Autocomplete add snippet" => "Autocomplete / add snippet",
"Multiple select" => "Multiple select",
"Move line up" => "Move line up",
"Move line down" => "Move line down",
"Duplicate lines" => "Duplicate line(s)",
"Remove lines" => "Remove line(s)",
"Insert line before" => "Insert line before",
"Insert line after" => "Insert line after",
"Search for selected" => "Search for selected",
"Jump to definition" => "Jump to definition / jump back",
"Comment uncomment" => "Comment / uncomment",
"Insert tab indent" => "Insert tab / auto indent selected",
"Insert more" => "Indent more",
"Insert less" => "Indent less",
"Wrap with div" => "Wrap with &lt;div&gt;",
"Wrap with span" => "Wrap with &lt;span&gt;",
"Wrap unwrap p" => "Wrap / unwrap with &lt;p&gt;",
"Wrap unwrap a" => "Wrap / unwrap with &lt;a&gt;",
"Wrap unwrap b" => "Wrap / unwrap with &lt;b&gt;",
"Wrap unwrap i" => "Wrap / unwrap with &lt;i&gt;",
"Wrap unwrap strong" => "Wrap / unwrap with &lt;strong&gt;",
"Wrap unwrap em" => "Wrap / unwrap with &lt;em&gt;",
"Wrap unwrap li" => "Wrap / unwrap with &lt;li&gt;",
"Wrap unwrap h1..." => "Wrap / unwrap with &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "End line with &lt;br&gt;",
"Close tab" => "Close tab",
"Select file folder" => "Select file / folder",
"Open file" => "Open file",
"Range select" => "Range select",
"Options for selected" => "Options for selected",
"Delete selected" => "Delete selected",
"Next previous tab" => "Next / previous tab",
"Next tab" => "Next tab",
"Previous tab" => "Previous tab",
"New tab" => "New tab",
"Close current tab" => "Close current tab",
"Open file prompt" => "Open file prompt",
"Find" => "Find",
"Previous" => "Previous",
"Focus on Go..." => "Focus on Go to line input",
"Save" => "Save",
"Save as" => "Save as...",
"View webpage" => "View webpage",
"Contract expand file..." => "Contract / expand file manager",
"Fold unfold current..." => "Fold / unfold current line",
"Refocus on document" => "Refocus on document",
"Cancel tasks" => "Cancel tasks"
),
"ice-coder" =>
array(
"results" => "results",
"No text selected..." => "No text selected to search on",
"all files" => "all files",
"all filenames" => "all filenames",
"selected files" => "selected files",
"selected filenames" => "selected filenames",
"Creating Folder" => "Creating Folder",
"Sorry you can..." => "Sorry, you can only have 100 files open at a time!",
"Opening File" => "Opening File",
"Enter relative file..." => "Enter relative file path (prefixed with /) or remote URL\\nYou can enter \\n'/path/file:123' or \\n'/path/file(123)' or \\n'/path/file.ext line 123' \\nto go directly to particular line",
"Getting" => "Getting",
"Saving" => "Saving:",
"Please enter the..." => "Please enter the new name for",
"Renaming to" => "Renaming to",
"Moving to" => "Moving to",
"Deleting File" => "Deleting File",
"Pasting File" => "Pasting File",
"Sorry cannot paste..." => "Sorry, cannot paste a whole root",
"Nothing to paste..." => "Nothing to paste, copy a file/folder first!",
"and" => "and",
"this document" => "this document",
"replace" => "replace",
"replace all" => "replace all",
"file" => "file",
"Replacing text in" => "Replacing text in",
"Sorry there was..." => "Sorry, there was an error with your request.\\n\\nPlease check your dev tools console for more info.",
"Cancelled tasks" => "Cancelled tasks",
"Open previous files" => "Open previous files?",
"Please enter your..." => "Please enter your GitHub token (either personal access token or client/secret pair token). See tooltip next to Github Auth Token on Help > Settings screen for more info",
"This will compare..." => "This will compare and show a diff view between your local dir and the repo. OK?",
"Please note for..." => "Please note: for updating to work properly, you need to have write access on all ICEcoder dirs & files. It will first check if this is the case and list any unwriteable (and therefore unmoveable) files.\\n\\nIf you need to recover this version of ICEcoder for any reason, you'll find it in the /tmp dir.\\n\\nClick OK to proceed with the check and auto-update, or cancel to visit the ICEcoder site so you can grab the zip and update manually.",
"You can start..." => "You can start bug reporting in Help > Settings",
"Error cannot find..." => "Error: cannot find/access the error file paths",
"No new errors..." => "No new errors found",
"You have made..." => "You have made changes. Are you sure you want to close without saving?",
"Close all tabs" => "Close all tabs?"
),
"login" =>
array(
"set password" => "set password",
"login" => "login",
"To disable registration..." => "To disable registration mode, open the settings menu or open lib/config___settings.php and change enableRegistration to false then reload this page",
"Registration mode enabled" => "Registration mode enabled",
"auto-check for updates" => "auto-check for updates",
"To put into..." => "To put into multi-user mode, open the settings menu or open lib/config___settings.php and change multiUser to true then reload this page",
"multi-user" => "multi-user"
),
"multiple-results" =>
array(
"rename all" => "rename all",
"replace all" => "replace all",
"document" => "document",
"Found" => "Found",
"times" => "times",
"replace" => "replace",
"file folder" => "file/folder",
"rename to" => "rename to",
"rename" => "rename",
"file" => "file",
"No matches found" => "No matches found",
"selected" => "selected",
"found in" => "found in",
"Replaced" => "Replaced"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder needs to reload to make this plugin usable. Reload now?",
"saving plugins" => "saving plugins...",
"Cannot update config..." => "Cannot update config file. Please set public write permissions on",
"and try again" => "and try again",
"couldnt delete dir" => "could not delete dir",
"couldnt delete file" => "could not delete file",
"plugins" => "plugins",
"Guide to writing..." => "Guide to writing plugins",
"Manage Installed" => "Manage Installed",
"URL" => "URL",
"Target" => "Target",
"Timer" => "Timer",
"Update" => "Update",
"Install" => "Install",
"Uninstall" => "Uninstall",
"Reload after install..." => "Reload after install required"
),
"properties" =>
array(
"properties" => "properties",
"Size" => "Size",
"Modified" => "Modified",
"Last access" => "Last access",
"Type" => "Type",
"Readable Writeable" => "Readable / Writeable",
"Relative path" => "Relative path",
"Absolute path" => "Absolute path",
"Contains" => "Contains",
"Permissions" => "Permissions",
"Owner" => "Owner",
"Group" => "Group",
"Public" => "Public",
"Read" => "Read",
"Write" => "Write",
"Execute" => "Execute",
"Change to" => "Change to",
"update" => "update"
),
"settings-common" =>
array(
"Your document does..." => "Your document does not appear to be in UTF-8 encoding so has been converted"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "Cannot update config file. Please set public write permissions on",
"and try again" => "and try again"
),
"settings-screen" =>
array(
"settings" => "settings",
"version" => "version",
"website" => "website",
"git" => "git",
"codemirror dir" => "codemirror dir",
"codemirror version" => "codemirror version",
"file manager root" => "file manager root",
"Get in contact..." => "Get in contact by...",
"You may use..." => "You may use ICEcoder for your own purposes, commercial or not, just let us know of any cool uses or customisations. :)<br><br>No warranty or liability accepted for anything, all responsibility of use is your own.",
"functionality" => "functionality",
"check for updates..." => "check for updates on load",
"auto open last..." => "auto open last files on login",
"when finding in..." => "when finding in files, exclude",
"assisting" => "assisting",
"code assist" => "code assist",
"visible tabs" => "visible tabs",
"locked nav" => "locked nav",
"tag wrapper command" => "tag wrapper command",
"auto-complete on" => "auto-complete on",
"security" => "security",
"new password" => "new password",
"8 chars min" => "8 chars min",
"confirm password" => "confirm password",
"banned files/folders" => "banned files/folders",
"banned paths" => "banned paths",
"ip addresses" => "ip addresses",
"Slash prefixed comma..." => "Slash prefixed, comma delimited",
"Comma delimited" => "Comma delimited",
"style" => "style",
"theme" => "theme",
"line wrapping" => "line wrapping",
"indent type" => "indent type",
"indent size" => "indent size",
"font size" => "font size",
"auto indent" => "auto indent",
"layout" => "layout",
"plugin panel aligned" => "plugin panel aligned",
"file manager" => "file manager",
"root" => "root",
"Slash prefixed" => "Slash prefixed",
"bug reporting" => "bug reporting",
"check in files" => "check in files",
"every" => "every",
"secs getting last" => "secs, getting last",
"lines" => "lines",
"multi-user" => "multi-user",
"Make sure you..." => "Make sure you do not lock yourself out",
"Registration" => "Registration",
"auth token" => "auth token",
"Required to get..." => "Required to get diffs, commit to your GitHub hosted repo etc. If you do not have one, you can use a:".PHP_EOL.PHP_EOL.
"- personal access token (https://help.github.com/articles/creating-an-access-token-for-command-line-use), or".PHP_EOL.
"- full client/secret pair token (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"It is not recommended you set your token here however and is more secure to enter it when requested by ICEcoder as that will keep it in session only.".PHP_EOL.PHP_EOL.
"However, if you work in a trusted and secure environment, it is more efficient to set it here.",
"Sorry cannot commit..." => "Sorry, cannot commit settings in demo mode",
"update" => "update"
),
"settings-update" =>
array(
"Cannot update config..." => "Cannot update config file. Please set public write permissions on",
"and try again" => "and try again",
"and press refresh" => "and press refresh"
),
"updater" =>
array(
"Update appears to..." => "Update appears to be successful"
),
"find-in-files" =>
array(
"Enter path to search in" => "Enter path to search in",
"Enter semicolon-separated masks of files to look at (e.g. *.php;*.html;*.js)" => "Enter semicolon-separated masks of files to look at (e.g. *.php;*.html;*.js)",
"Type of text" => "Type of text",
"Fixed text" => "Fixed text",
"Regular expression" => "Regular expression",
"Case sensitive" => "Case sensitive",
"Yes" => "Yes",
"No" => "No",
"Search" => "Search",
)
);
?>

425
lang/french.php Normal file
View File

@@ -0,0 +1,425 @@
<?php
// French language translation
// par: @krisxoofoo (GitHub)
// @kris_fr Twitter)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>Cliquez sur les ic&ocirc;nes<br>pour l&apos;aide &amp;<br>et infos d&apos;utilisation</b>",
"server" => "Serveur",
"Server name, OS..." => "Nom du serveur, OS & IP :",
"Root" => "Racine :",
"ICEcoder root" => "Racine d&apos;ICEcoder :",
"PHP version" => "Version PHP :",
"Date & time" => "Date & heure :",
"your device" => "Votre &eacute;quipement",
"Browser" => "Navigateur :",
"Your IP" => "Votre IP :",
"files" => "Fichiers",
"Last 10 files..." => "10 derniers fichiers ouverts :",
"none" => "[aucun]",
"test suite" => "Suite de test",
"Run unit tests" => "Lancer les tests unit",
"dev mode" => "Mode dev",
"Status" => "Statuts",
"Using" => "Utilise",
"You can switch..." => "Vous pouvez basculer le mode dev on/off
dans lib/config__settings.php",
"results" => "r&eacute;sultats"
),
"files" =>
array(
"Lock" => "Verrouiller",
"Refresh" => "Rafra&icirc;chir",
"ROOT" => "[RACINE]"
),
"index" =>
array(
"UPDATE INFO" => "INFO DE MISE A JOUR",
"now available" => "actuellement disponible",
"Your version is" => "Votre version est la",
"Update now" => "Mettre &agrave; jour maintenant",
"You have some..." => "Vous avez quelques changements non sauvegard&eacute;s",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "en progression",
"Color picker" => "S&eacute;lecteur de couleur",
"New File" => "Nouveau fichier",
"New Folder" => "Nouveau dossier",
"Upload File(s)" => "T&eacute;l&eacute;charger le(s) Fichier(s)",
"Paste" => "Coller",
"Open" => "Ouvrir",
"Copy" => "Copier",
"Duplicate" => "Dupliquer",
"Delete" => "Effacer",
"Rename" => "Renommer",
"View Webpage" => "Afficher la page web",
"Download" => "T&eacute;l&eacute;charger",
"Properties" => "Propri&eacute;t&eacute;s",
"File" => "Fichier",
"Edit" => "Editer",
"Remote" => "Distant",
"Help" => "Aide",
"Save" => "Enregistrer",
"Save As" => "Enregistrer sous",
"Live Preview" => "Pr&eacute;visualisation",
"Upload" => "T&eacute;l&eacute;charger",
"Zip" => "Compresser",
"Print" => "Imprimer",
"Fullscreen toggle" => "Basculer en mode plein &eacute;cran",
"Logout" => "D&eacute;connexion",
"Undo" => "Annuler",
"Redo" => "Refaire",
"Indent more" => "Plus d&apos;indentation",
"Indent less" => "Moins d&apos;indentation",
"Autocomplete" => "Autocompl&eacute;tion",
"Comment/Uncomment" => "Commenter/D&eacute;commenter",
"Jump to Definition" => "Aller &agrave; la D&eacute;finition",
"Manual" => "Manuel",
"Shortcuts" => "Raccourcis",
"Settings" => "Pr&eacute;f&eacute;rences",
"Search for selected" => "Rechercher pour la s&eacute;lection",
"website" => "Site internet",
"Close all tabs" => "Fermer les onglets",
"Alphabetize tabs" => "Onglets par ordre alphab&eacute;tique",
// "Find" => "Chercher",
// "in" => "dans",
// "and" => "et",
// "replace" => "remplacer",
// "replace all" => "remplacer tout",
// "this document" => "ce document",
// "open documents" => "les documents ouverts",
// "all files" => "tous les fichiers",
// "all filenames" => "tous les noms de fichiers",
"Turn on/off..." => "Basculer on/off l&apos;assistance au code",
"Code Assist" => "Assistance au Code",
"Go to Line" => "Aller &agrave; la ligne",
"View" => "Afficher",
"Bug reporting not active" => "Le signalement de dysfonctionnement n&apos;est pas actif"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Trouv&eacute; dans :"
),
"file-control" =>
array(
"Sorry" => "D&eacute;sol&eacute;",
"does not seem..." => "ne semble pas exister sur le serveur",
"Sorry, could not..." => "D&eacute;sol&eacute;, impossibilit&eacute; de r&eacute;cup&eacute;rer le contenu de",
"Sorry, cannot create..." => "D&eacute;sol&eacute;, impossibilit&eacute; de cr&eacute;er le dossier sur",
"Sorry, cannot copy" => "D&eacute;sol&eacute;, impossibilit&eacute; de copier",
"into" => "dans",
"Uploaded file(s) OK" => "T&eacute;l&eacute;chargement du (des) fichier(s) r&eacute;ussi(s)",
"Sorry, cannot upload" => "D&eacute;sol&eacute;, impossibilit&eacute; de t&eacute;l&eacute;charger",
"Sorry, cannot upload..." => "D&eacute;sol&eacute;, impossibilit&eacute; de t&eacute;l&eacute;charger en mode d&eacute;mo",
"Sorry, cannot rename" => "D&eacute;sol&eacute;, impossibilit&eacute; de renommer",
"Maybe public write..." => " Peut-&ecirc;tre que les permissions d&apos;&eacute;criture publique sont n&eacute;cessaires sur ce dossier ou son r&eacute;pertoire ?",
"Sorry, cannot move" => "D&eacute;sol&eacute;, impossibilit&eacute; de d&eacute;placer",
"Sorry, cannot save" => "D&eacute;sol&eacute;, impossibilit&eacute; de sauvegarder",
"Sorry, cannot replace..." => "D&eacute;sol&eacute;, impossibilit&eacute; de remplacer le texte dans ",
"Sorry, cannot change..." => "D&eacute;sol&eacute;, impossibilit&eacute; de changer les permissions sur",
"Sorry, cannot delete..." => "D&eacute;sol&eacute;, imossibilit&eacute; de supprimer le dossier racine",
"Sorry, cannot delete" => "D&eacute;sol&eacute;, impossibilit&eacute; d&apos;effacer",
"Sorry, this file..." => "D&eacute;sol&eacute;, le fichier a &eacute;t&eacute; modifi&eacute;, impossibilit&eacute; de sauvegarder",
"Reload this file..." => "Recharger le fichier, et copier votre version dans un nouveau document ?",
"There was a..." => "Un probl&egrave;me technique a &eacute;t&eacute; rencontr&eacute;, probablement quelque chose qui n&apos;&eacute;tait pas tout &agrave; fait pr&ecirc;t. ICEcoder a donc relanc&eacute; &agrave; nouveau son contr&ocirc;le de fichier.",
"displayed at" => "affich&eacute; sur",
"Enter filename to..." => "Saisissez le nom du fichier &agrave; enregistrer sur",
"That file exists..." => "Ce fichier existe d&eacute;j&agrave;, voulez vous l&apos;&eacute;craser ?",
"Saving" => "Sauvegard&eacute;"
),
"get-branch" =>
array(
"There are no..." => "Il n&apos;y a pas de diff&eacute;rences entre le repo local et celui de GitHub. Revenir en mode normal ?",
"Sorry, there was..." => "D&eacute;sol&eacute;, il y avait une erreur, le code :",
"Your local folder..." => " Votre dossier local est vide, voulez-vous le cloner ?"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "D&eacute;sol&eacute;, impossible de cr&eacute;er un dossier dans",
"Cannot update config..." => "Impossibilit&eacute; de mettre &agrave; jour le fichier de configuration. Veuillez v&eacute;rifier les permissions d&apos;&eacute;criture.",
"and try again" => "et essayez de nouveau",
"saving github paths" => "chemins github sauvegard&eacute;s ...",
"github paths" => "chemins github",
"Choose existing path" => "Choisis le chemin existant",
"Local path" => "Chemin local",
"Remote GitHub path" => "Chemin distant GitHub",
"Choose" => "Choisir",
"Set local and..." => "D&eacute;finir le chemin d&apos;acc&egrave;s local et distant &agrave; blanc pour le retirer ",
"Update" => "Mise &agrave; jour",
"Add new path" => "Ajouter un nouveau chemin",
"Add" => "Ajouter",
"Usage Info" => "Info d&apos;utilisation :",
"Enter relative local..." => "Entrez les chemins relatifs locaux (par exemple / serveur / mesfichiers) et les chemins absolus GitHub (par exemple https://github.com/user/repo ou https://github.com/user/repo/tree/branch pour les branches). Avec ceci, vous aurez &eacute;tabli les chemins source sur les deux sites, comme une paire.",
"You can then..." => "Vous pouvez ensuite choisir une paire de chemin, et cela devient alors votre nouveau chemin d&apos;acc&egrave;s racine dans ICEcoder.",
"The file manager..." => "Le gestionnaire de fichiers affiche alors une nouvelle ic&ocirc;ne GitHub, que vous pouvez cliquer dessus pour ex&eacute;cuter et afficher une v&eacute;rification des diff&eacute;rences entre les 2 sources. Ces diff&eacute;rences peuvent &ecirc;tre vers&eacute;es et bascul&eacute;es dans le projet distant GitHub ou clon&eacute;es sur votre version locale du projet, afin de synchroniser vos fichiers.",
"If you want..." => " Si vous souhaitez d&eacute;finir un autre chemin d&apos;acc&egrave;s &agrave; la racine, cela peut &ecirc;tre fait dans l&apos;&eacute;cran des param&egrave;tres."
),
"github" =>
array(
"Sorry, you do..." => "D&eacute;sol&eacute;, vous ne semblez pas avoir OpenSSL charg&eacute; sur votre instance de PHP, https n&apos;est donc pas disponible. Cela est n&eacute;cessaire pour le transfert de donn&eacute;es GitHub, veuillez modifier les param&egrave;tres du fichier php.ini, red&eacute;marrez votre serveur et essayez &agrave; nouveau."
),
"headers" =>
array(
"Bad CSRF token..." => "Mauvais jeton CSRF. S&apos;il vous pla&icirc;t, envoyer un rapport de l&apos;erreur &agrave; https://github.com/mattpass/ICEcoder si vous d&eacute;sirez qu&apos;il soit corrig&eacute;."
),
"help" =>
array(
"shortcuts" => "raccourcis",
"Within document" => "Dans un fichier",
"On Tabs" => "Dans les onglets",
"Within file manager" => "Dans le gestionnaire de fichiers",
"Anywhere" => "N&apos;importe o&ugrave;",
"Space" => "Espace",
"Click" => "Clic",
"or" => "ou",
"Left click" => "Clic gauche",
"Middle click" => "Clic du milieu",
"Double click tap..." => "Double clic / touche (mobile)",
"Right click" => "Clic droit",
"Middle scrollwheel" => "Roulette du milieu",
"Drag" => "Glisser",
"Autocomplete add snippet" => "Saisie semi-automatique / ajouter un extrait",
"Multiple select" => "S&eacute;lection multiple",
"Move line up" => "Aller &agrave; la ligne sup&eacute;rieure",
"Move line down" => "Aller &agrave; la ligne inf&eacute;rieure",
"Duplicate lines" => "Dupliquer la(les) ligne(s)",
"Remove lines" => "Supprimer la(les) ligne(s)",
"Insert line before" => "Ins&eacute;rer un ligne avant",
"Insert line after" => "Ins&eacute;rer une ligne apr&egrave;s",
"Search for selected" => "Rechercher pour la s&eacute;lection",
"Jump to definition" => "Aller &agrave; la d&eacute;finition / revenir en arri&egrave;re",
"Comment uncomment" => "Commenter / D&eacute;commenter",
"Insert tab indent" => "Ins&eacute;rer un tableau / indent selected",
"Wrap with div" => "Plier avec &lt;div&gt;",
"Wrap with span" => "Plier avec &lt;span&gt;",
"Wrap unwrap p" => "Plier / d&eacute;plier avec &lt;p&gt;",
"Wrap unwrap a" => "Plier / d&eacute;plier avec &lt;a&gt;",
"Wrap unwrap b" => "Plier / d&eacute;plier avec &lt;b&gt;",
"Wrap unwrap i" => "Plier / d&eacute;plier avec &lt;i&gt;",
"Wrap unwrap strong" => "Plier / d&eacute;plier avec &lt;strong&gt;",
"Wrap unwrap em" => "Plier / d&eacute;plier avec &lt;em&gt;",
"Wrap unwrap h1..." => "Plier / d&eacute;plier avec &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "Fin de ligne avec &lt;br&gt;",
"Close tab" => "Fermer l&apos;onglet",
"Select file folder" => "S&eacute;lectionner fichier / dossier",
"Open file" => "Ouvrir le fichier",
"Range select" => "S&eacute;lection de la plage",
"Options for selected" => "Options pour s&eacute;lectionner",
"Delete selected" => "Suppression de la s&eacute;lection",
"Next previous tab" => "Onglet suivant / pr&eacute;c&eacute;dent",
"Next tab" => "Onglet suivant",
"Previous tab" => "Onglet pr&eacute;c&eacute;dent",
"New tab" => "Nouvel onglet",
"Close current tab" => "Fermer l&apos;onglet courant",
"Open file prompt" => "Ouvrir une invite de fichier",
"Find" => "Chercher",
"Focus on Go..." => " Focus sur le d&eacute;but de ligne",
"Save" => "Enregistrer",
"Save as" => "Enregistrer sous...",
"View webpage" => "Afficher la page web",
"Contract expand file..." => "R&eacute;duire / agrandir le gestionnaire de fichiers",
"Fold unfold current..." => "Plier / d&eacute;plier la ligne courante",
"Refocus on document" => "Revenir sur le document",
"Cancel tasks" => "Quitter les tâches"
),
"ice-coder" =>
array(
"No text selected..." => "Aucun texte s&eacute;lectionn&eacute; pour la recherche sur",
"Creating Folder" => "r&eacute;ation de dossier",
"Sorry you can..." => "D&eacute;sol&eacute;, vous ne pouvez pas avoir plus de 100 fichiers ouverts en m&ecirc;me temps !",
"Opening File" => "Ouverture de fichier",
"Enter relative file..." => "Entrez le chemin relatif du fichier (pr&eacute;fix&eacute; avec un /) ou l&apos;URL distante",
"Getting" => "Obtention",
"Please enter the..." => "S&apos;il vous plait, saisissez le nouveau nom pour",
"Renaming to" => "Renomm&eacute; en",
"Moving to" => "D&eacute;plac&eacute; vers",
"Deleting File" => "Suppression fichier",
"Pasting File" => "Collage fichier",
"Sorry cannot paste..." => "D&eacute;sol&eacute;, il n&apos;est pas possible de coller une racine",
"Nothing to paste..." => "Rien &agrave; coller, copiez un fichier/dossier en premier !",
"Replacing text in" => "Remplacement de texte dans",
"Cancelled tasks" => "Tâches annul&eacute;s",
"Open previous files" => "Ouvrir les fichiers pr&eacute;c&eacute;dents ?",
"Please enter your..." => "S&apos;il vous pla&icirc;t entrez votre token GitHub (soit l&apos;acc&egrave;s par token personnel ou le token client / paire secr&egrave;te). Voir l&apos;info-bulle &agrave; c&ocirc;t&eacute; de Github Auth Token sur &eacute;cran Aide> Param&egrave;tres pour plus d&apos;infos",
"This will compare..." => "Ceci compare et montre une vue des diff&eacute;rences entre votre r&eacute;pertoire local et le repo. D&apos;accord ?",
"Please note for..." => "S&apos;il vous pla&icirc;t, noter : la mise &agrave; jour fonctionne correctement, vous devez avoir les permissions d&apos;&eacute;criture / suppression &agrave; tous les r&eacute;pertoires et fichiers d&apos;ICEcoder. Si vous avez besoin de r&eacute;cup&eacute;rer cette version d&apos;ICEcoder pour une raison quelconque, vous la trouverez dans le r&eacute;pertoire / tmp. Cliquez sur OK pour proc&eacute;der &agrave; une mise &agrave; jour automatique, ou annuler et visiter le site d&apos;ICEcoder de sorte que vous pouvez r&eacute;cup&eacute;rer le fichier zip et mettre &agrave; jour manuellement.",
"You can start..." => "Vous pouvez reporter un dysfonctionnement dans Aide > Pr&eacute;f&eacute;rences",
"Error cannot find..." => "Erreur : ne peut pas trouver / acc&eacute;der aux chemins des fichiers d&apos;erreur",
"No new errors..." => "Aucune nouvelle erreur trouv&eacute;e",
"You have made..." => "Vous avez r&eacute;alis&eacute; des modifications. Etes vous sûr(e) de d&eacute;sirer quitter sans sauvegarder ?",
"Close all tabs" => "Fermer tous les onglets?"
),
"login" =>
array(
"set password" => "D&eacute;finir un mot de passe",
"login" => "Connexion",
"To disable registration..."=> "Pour d&eacute;sactiver le mode &apos;enregsitrement&apos;, ouvrir le menu des pr&eacute;f&eacute;rences ou le fichier lib/config___settings.php et modifier enableRegistration &agrave; &apos;false&apos;, puis recharger cette page",
"Registration mode enabled" => "Mode Enregistrement activ&eacute;",
"auto-check for updates" => "V&eacute;rification automatique des mises &agrave; jour",
"To put into..." => "Pour passer en mode &apos;multi-utilisateur&apos;, ouvrir le menu des pref&eacute;rences ou le ifchier lib/config___settings.php et modifier multiUser &agrave; &apos;true&apos;, puis recharger cette page",
"multi-user" => "Multi-utilisateur"
),
"multiple-results" =>
array(
"rename all" => "Tout renommer",
"replace all" => "Tout remplacer",
"document" => "document",
"Found" => "trouv&eacute;",
"times" => "date",
"replace" => "remplacer",
"file folder" => "fichier/dossier",
"rename to" => "renommer en",
"rename" => "renommer",
"file" => "fichier",
"No matches found" => "Aucun r&eacute;sultat de trouver",
"selected" => "s&eacute;lectionn&eacute;",
"found in" => "trouv&eacute; dans",
"Replaced" => "Remplac&eacute;"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder a besoin d&apos;&ecirc;tre recharg&eacute; pour rendre ce plugin utilisable. Le faire maintenant ?",
"saving plugins" => "sauvegarde des plugins ...",
"Cannot update config..." => "Impossibilit&eacute; de mettre &agrave; jour le fichier de configuration. V&eacute;rifiez les permissions d&apos;&eacute;criture",
"and try again" => "et essayez de nouveau",
"couldnt delete dir" => "ne peut pas effacer le dossier",
"couldnt delete file" => "ne peut pas effacer le fichier",
"plugins" => "plugins",
"Guide to writing..." => "Guide pour &eacute;crire des plugins",
"Manage Installed" => "Gestionnaire install&eacute;",
"URL" => "URL",
"Target" => "Cible",
"Timer" => "Compteur",
"Update" => "Mise &agrave; jour",
"Install" => "Installation",
"Uninstall" => "D&eacute;sinstallation",
"Reload after install..." => "Une reconnexion est n&eacute;cessaire apr&egrave;s l&apos;installation"
),
"properties" =>
array(
"properties" => "propri&eacute;t&eacute;s",
"Size" => "Taille",
"Modified" => "Derni&egrave;re modification",
"Last access" => "Dernier acc&egrave;s",
"Type" => "Type",
"Readable Writeable" => "Lisible / Inscriptible",
"Relative path" => "Chemin relatif",
"Absolute path" => "Chemin absolute",
"Contains" => "Contenu",
"Permissions" => "Permissions",
"Owner" => "Propri&eacute;taire",
"Group" => "Groupe",
"Public" => "Public",
"Read" => "Lire",
"Write" => "Ecrire",
"Execute" => "Ex&eacute;cuter",
"Change to" => "Modifier en",
"update" => "mise &agrave; jour"
),
"settings-common" =>
array(
"Your document does..." => "Votre document ne semble pas &ecirc;tre en UTF-8 et a donc &eacute;t&eacute; converti"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "Impossibilit&eacute; de mettre &agrave; jour le fichier de configuration. V&eacute;rifiez les permissions d&apos;&eacute;criture sur celui-ci",
"and try again" => "et essayez de nouveau"
),
"settings-screen" =>
array(
"settings" => "pr&eacute;f&eacute;rences",
"version" => "version",
"website" => "Site internet",
"git" => "git",
"codemirror dir" => "chemin de codemirror",
"codemirror version" => "version de codemirror ",
"file manager root" => "racine du gestionnaire de fichiers",
"Free to use..." => "Libre de l&apos;utiliser pour vos propres fins, commerciales ou non, faites moi juste savoir de toute utilisation sympa ou personnalisations. :)<br><br>Aucune garantie ou responsabilit&eacute; est accept&eacute;es de notre part, toute responsabilit&eacute; d&apos;utilisation est de votre ressort.<br><br>De nombreuses personnes fantastiques et d&apos;entreprises ont contribu&eacute; &agrave; r&eacute;aliser ICEcoder et il est important de les remercier ici. S&apos;il vous pla&icirc;t, parcourez la liste compl&egrave;te sur",
"functionality" => "fonctionnalit&eacute;s",
"check for updates..." => "V&eacute;rifier les mises &agrave; jour",
"auto open last..." => "affichage des derniers fichiers",
"when finding in..." => "extension à exclure des recherches",
"assisting" => "assistant",
"code assist" => "Assistance de code",
"visible tabs" => "onglets visibles",
"locked nav" => "navigation v&eacute;rouill&eacute;e",
"tag wrapper command" => "commande de tag",
"auto-complete on" => "auto-complétion sur",
"security" => "s&eacute;curit&eacute;",
"new password" => "nouveau mot de passe",
"8 chars min" => "8 caract&egrave;res minimum",
"confirm password" => "confirmation du mot de passe",
"banned files/folders" => "fichiers/dossiers bannis",
"banned paths" => "chemins bannis",
"ip addresses" => "adresses ip",
"Slash prefixed comma..."=> "Slash pr&eacute;fix&eacute;, s&eacute;par&eacute;es par des virgules",
"Comma delimited" => "D&eacute;limit&eacute; par des virgules",
"style" => "style",
"theme" => "th&egrave;me",
"line wrapping" => "retour &agrave; la ligne",
"indent type" => "indent type",
"indent size" => "indent size",
"font size" => "font size",
"auto indent" => "auto indent",
"layout" => "disposition",
"plugin panel aligned" => "panneau des plugins align&eacute;",
"file manager" => "gestionnaire de fichiers",
"root" => "racine",
"Slash prefixed" => "Slash pr&eacute;fix&eacute;",
"bug reporting" => "Rapport de dysfonctionnement",
"check in files" => "v&eacute;rifier dans les fichiers",
"every" => "chaque",
"secs getting last" => "secondes, obtenir le dernier",
"lines" => "lignes",
"multi-user" => "multi-utilisateurs",
"Make sure you..." => "Assurez-vous que vous ne vous bloquez pas sur",
"Registration" => "Enregistrement",
"auth token" => "auth token",
"Required to get..." => "N&eacute;cessaire pour obtenir les diffs, proc&eacute;der &agrave; un commit sur votre projet sous GitHub. Si vous n&apos;en avez pas, vous pouvez utiliser un :".PHP_EOL.PHP_EOL.
"- jeton/token d&apos;acc&egrave;s personel (https://help.github.com/articles/creating-an-access-token-for-command-line-use), ou un jeton/token ".PHP_EOL.
" client/paire secr&egrave;te (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"Il n&apos;est pas recommand&eacute; de d&eacute;finir votre jeton ici, cependant, il est plus sûr de l&apos;entrer &agrave; la demande d&apos;ICEcoder car cela le garde uniquement en session.".PHP_EOL.PHP_EOL.
"Cependant, si vous travaillez dans un environnement fiable et s&eacute;curis&eacute;, il est plus efficace de le mettre ici.",
"Sorry cannot commit..." => "D&eacute;sol&eacute;, vous ne pouvez pas modifier les pr&eacute;f&eacute;rences en mode de d&eacute;monstration",
"update" => "Mise &agrave; jour"
),
"settings-update" =>
array(
"Cannot update config..." => "Impossibilit&eacute; de mettre &agrave; jour le fichier de configuration. V&eacute;rifiez les permissions d&apos;&eacute;criture sur celui-ci",
"and try again" => "et essayez de nouveau",
"and press refresh" => "et pressez le rafra&icirc;chissement de la page"
),
"updater" =>
array(
"Update appears to..." => "La mise &agrave; jour semble s&apos;&ecirc;tre r&eacute;alis&eacute;e avec succ&egrave;s"
)
);
?>

398
lang/german.php Normal file
View File

@@ -0,0 +1,398 @@
<?php
// German language translation
// by: @olliiee (GitHub)
// @trolliusgigant (Twitter)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>Klick auf das Icon<br>f&uuml;r Hilfe &amp;<br>Anwendungsbeispielen</b>",
"server" => "Server",
"Server name, OS..." => "Servername, OS & IP:",
"Root" => "Root:",
"ICEcoder root" => "ICEcoder root:",
"PHP version" => "PHP Version:",
"Date & time" => "Datum & Uhrzeit:",
"your device" => "Dein Gerät",
"Browser" => "Browser:",
"Your IP" => "Deine IP:",
"files" => "Dateien",
"Last 10 files..." => "Die letzten 10 ge&ouml;ffneten Dateien:",
"none" => "[nichts]",
"test suite" => "Test Suite",
"Run unit tests" => "Unittest starten",
"dev mode" => "Entwicklermodus",
"Status" => "Status",
"Using" => "Verwenden",
"You can switch..." => "Du kannst den Entwicklermodus in der in lib/config__settings.php ein- und ausschateln",
"results" => "Ergebnis"
),
"files" =>
array(
"Lock" => "Sperren",
"Refresh" => "Erneueren",
"ROOT" => "[ROOT]"
),
"index" =>
array(
"UPDATE INFO" => "Update Infos",
"now available" => "jetzt verf&uuml;gbar",
"Your version is" => "Deine Version ist",
"Update now" => "Jetzt aktualisieren",
"You have some..." => "Du hast einige nicht gespeicherete Dateien",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "arbeite",
"Color picker" => "Farbauswahl",
"New File" => "Neue Datei",
"New Folder" => "Neuer Ordner",
"Upload File(s)" => "Datei(en) hochladen",
"Paste" => "Einf&uuml;gen",
"Open" => "&Ouml;ffnen",
"Copy" => "Kopieren",
"Duplicate" => "Duplizieren",
"Delete" => "L&ouml;schen",
"Rename" => "Umbenennen",
"View Webpage" => "Webseite anzeigen",
"Download" => "Herunterladen",
"Properties" => "Einstellungen",
"File" => "Datei",
"Edit" => "Editieren",
"Remote" => "Fernzugriff",
"Help" => "Hilfe",
"Save" => "Speichern",
"Save As" => "Speichern als",
"Live Preview" => "Live Vorschau",
"Upload" => "Hochladen",
"Zip" => "Zip",
"Print" => "Drucken",
"Fullscreen toggle" => "Vollbildmodus wechseln",
"Logout" => "Ausloggen",
"Undo" => "R&uuml;ckg&auml;ngig",
"Redo" => "Wiederherstellen",
"Indent more" => "Einzug vergr&ouml;&szlig;ern",
"Indent less" => "Einzug verkleinern",
"Autocomplete" => "Auto vervollst&auml;ndigen",
"Comment/Uncomment" => "Kommentieren/Auskommentieren",
"Jump to Definition" => "Springe zur Definition",
"Manual" => "Anleitung",
"Shortcuts" => "Schnellzugriffe",
"Settings" => "Einstellungen",
"Search for selected" => "Nach Auswahl suchen",
"website" => "Website",
"Close all tabs" => "Alle Tabs schlie&szlig;en",
"Alphabetize tabs" => "Tabs alphabetisch sortieren",
// "Find" => "Finden",
// "in" => "in",
// "and" => "und",
// "replace" => "ersetzen",
// "replace all" => "alle ersetzen",
// "this document" => "dieses Dokument",
// "open documents" => "ge&ouml;ffnete Dokumente",
// "all files" => "Alle Dateien",
// "all filenames" => "Alle Dateinamen",
"Turn on/off..." => "Codeassistenten ein- ausschalten",
"Code Assist" => "Codeassistent",
"Go to Line" => "Geh zur Zeile",
"View" => "Anzeigen",
"Bug reporting not active" => "Fehlermeldungen sind nicht aktiv"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Gefunden in:"
),
"file-control" =>
array(
"Sorry" => "Entschuldigung",
"does not seem..." => "Es scheint auf dem Server nicht zu existieren",
"Sorry, could not..." => "Entschuldigung, kann den Inhalte von",
"Sorry, cannot create..." => "Entschuldigung, kann den Ordner nicht erstellen in",
"Sorry, cannot copy" => "Entschuldigung, kann nicht kopieren",
"into" => "in",
"Uploaded file(s) OK" => "Hoch geladene Datei(n) OK",
"Sorry, cannot upload" => "Entschuldigung, kann nicht hochladen",
"Sorry, cannot upload..." => "Entschuldigung, kann solange nicht hochladen, solange der Demo Modus aktiv ist",
"Sorry, cannot rename" => "Entschuldigung, kann nicht umbenennen",
"Maybe public write..." => "Vielleicht fehlen Schreibrechte auf dem &uuml;bergeordneten Ordner?",
"Sorry, cannot move" => "Entschuldigung, kann nicht verschieben",
"Sorry, cannot save" => "Entschuldigung, kann nicht speichern",
"Sorry, cannot replace..." => "Entschuldigung, kann den Text nicht ersetzen",
"Sorry, cannot change..." => "Entschuldigung, kann die Berechtigung nicht &auml;ndern f&uuml;r",
"Sorry, cannot delete..." => "Entschuldigung, kann das Hauptverzeichnis nicht l&ouml;schen",
"Sorry, cannot delete" => "Entschuldigung, kann nicht l&ouml;schen",
"Sorry, this file..." => "Entschuldigung, die Datei wurde ge&auml;ndert, kann nicht speichern",
"Reload this file..." => "Soll die Datei mit deiner neueren Version neu geladen werden?",
"There was a..." => "Irgend was ist schief gelaufen. ICEcoder l&auml;dt einfach noch mal neu.",
"displayed at" => "angezeigt bei",
"Enter filename to..." => "Dateinamen eingeben um es zu speichern",
"That file exists..." => "Die Datei existiert bereits, &uuml;berschreiben?",
"Saving" => "Speichere"
),
"get-branch" =>
array(
"There are no..." => "Es gibt keinen Unterschied zwischen der lokalen Datei und dem im GitHub Repo. Zur&uuml;ck zum regul&auml;ren Modus?",
"Sorry, there was..." => "Entschuldigung, es ist ein Fehler aufgetreten. Fehlercode:",
"Your local folder..." => "Dein lokales Verzeichnis ist leer, soll es geklont werden"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "Entschuldigung, kann Verzeichnis nicht anlegen",
"Cannot update config..." => "Kann die Config Datei nicht aktualisieren. Bitte Schreibrechte setzen",
"and try again" => "und versuch es noch einmal",
"saving github paths" => "Speichere GitHub Pfad ...",
"github paths" => "GitHub Pfad",
"Choose existing path" => "W&auml;hle existierenden Pfad",
"Local path" => "Lokaler Pfad",
"Remote GitHub path" => "Ferner GitHub Pfad",
"Choose" => "Wh&auml;hle",
"Set local and..." => "L&ouml;sch lokalen und fernen Pfad",
"Update" => "Aktualisieren",
"Add new path" => "Neuen Pfad hinzuf&uuml;gen",
"Add" => "Hinfzuf&uuml;gen",
"Usage Info" => "Infos zur Verwendung:",
"Enter relative local..." => "Gib den relativen, lokalen Pfad (z.B. /server/meineDateien) und absoluten GitHub Pfad (z.B. https://github.com/user/repo oder https://github.com/user/repo/tree/branch f&uuml;r branches), wie im Beispiel an. Dadurch werden die entsprechenden Quellverzeichnisse als Paar angelegt.",
"You can then..." => "Du kannst ein Paar ausw&auml;hlenn, welches als neues Root Verzeichnis in ICECoder festgelegt wird.",
"The file manager..." => "Im Dateimanager erscheint ein GitHub Icon. Durch einen Klick auf das Icon, werden die Unterschiede zwischen beiden Versionen angezeigt. Diese Unterschiede können committed und zum GitHub Repo gepusht, oder zum lokale Pfad geklont werden.",
"If you want..." => "Soll ein weiterers Hauptverzeichnis gesetzt werden, kann dies in den Einstellungen vorgenommen werden."
),
"github" =>
array(
"Sorry, you do..." => "Es scheint so, als sei OpenSSL nicht mit PHP geladen worden, dadurch steht https nicht zur verf&uuml;gung. Dies wird jedoch f&uuml;r den Datentransfer zu GitHub ben&ouml;tigt. Bitte die PHP.ini entsprechend anpassen und neu starten."
),
"headers" =>
array(
"Bad CSRF token..." => "Fehlerhafter CSRF Token. Bitte den Fehler an https://github.com/mattpass/ICEcoder damit das Problem gel&ouml;st werden kann."
),
"help" =>
array(
"shortcuts" => "shortcuts",
"Within document" => "Innerhalb des Dokuments",
"On Tabs" => "Ge&ouml;ffnete Tabs",
"Within file manager" => "Innerhalb des Dateimanagers",
"Anywhere" => "&Uuml;berall",
"Space" => "Leerzeichen",
"Click" => "Klick",
"or" => "oder",
"Left click" => "Linksklick",
"Middle click" => "mittlerer Klick",
"Double click tap..." => "Doppelklick / Tap (Mobile)",
"Right click" => "Rechtsklick",
"Middle scrollwheel" => "mittleres Mausrad",
"Drag" => "Ziehen",
"Autocomplete add snippet" => "Autocomplete / snippet hinzuf&uuml;gen",
"Multiple select" => "Mehrfachauswahl",
"Move line up" => "Zeile h&ouml;her",
"Move line down" => "Zeile runter",
"Duplicate lines" => "Zeile(n) duplizieren",
"Remove lines" => "Zeile(n) entfernen",
"Insert line before" => "Zeile vorher einf&uuml;gen",
"Insert line after" => "Zeile danach ein&uuml;gen",
"Search for selected" => "Nach dem gesuchten ausw&auml;hlen",
"Jump to definition" => "Zur Definition springen / zur&uml;ck springen",
"Comment uncomment" => "Kommentieren / Auskommentieren",
"Insert tab indent" => "Tab einf&uuml;gen / Gedankenstrich selektiert",
"Wrap with div" => "Mit &lt;div&gt; umschlie&szlig;en",
"Wrap with span" => "Mit &lt;span&gt; umschlie&szlig;en",
"Wrap unwrap p" => "Umschlie&szlig;en / unwrap with &lt;p&gt;",
"Wrap unwrap a" => "Umschlie&szlig;en / Mit &lt;a&gt; auschlie&szlig;en",
"Wrap unwrap b" => "Umschlie&szlig;en / Mit &lt;b&gt; auschlie&szlig;en",
"Wrap unwrap i" => "Umschlie&szlig;en / Mit &lt;i&gt; auschlie&szlig;en",
"Wrap unwrap strong" => "Umschlie&szlig;en / Mit &lt;strong&gt; auschlie&szlig;en",
"Wrap unwrap em" => "Umschlie&szlig;en / Mit &lt;em&gt; auschlie&szlig;en",
"Wrap unwrap h1..." => "Umschlie&szlig;en / Mit &lt;h1&gt; - &lt;h3&gt; auschlie&szlig;en",
"End line with..." => "Zeile abschlie&szlig;en mit &lt;br&gt;",
"Close tab" => "Tab schlie&szlig;en",
"Select file folder" => "Datei / Verzeichnis ausw&auml;hlen",
"Open file" => "Datei &ouml;ffnen",
"Range select" => "Bereich ausw&auml;hlen",
"Options for selected" => "Optionen f&uuml;r ausgew&auml;hlte",
"Delete selected" => "Ausgew&auml;hlte l&ouml;schen",
"Next previous tab" => "N&auml;chster / Vorheriger Tab",
"Next tab" => "N&auml;chster Tab",
"Previous tab" => "Vorheriger Tab",
"New tab" => "Neuer Tab",
"Close current tab" => "Aktuellen Tab schlie&szlig;en",
"Open file prompt" => "Datei &ouml;ffnen Dialog anzeigen",
"Find" => "Finden",
"Focus on Go..." => "Fokus auf Gehe zu Zeile Feld setzen",
"Save" => "Speichern",
"Save as" => "Speichern als ...",
"View webpage" => "Webseite anzeigen",
"Contract expand file..." => "Alle Dateien / Verzeichnisse anzeigen",
"Fold unfold current..." => "Aktuelle Zeile einklappen",
"Refocus on document" => "Erneut den Fokus auf das Dokument setzen",
"Cancel tasks" => "Vorgang abbrechen"
),
"login" =>
array(
"set password" => "Passwort setzen",
"login" => "Login",
"To disable registration..." => "Um den Registrierungsmodus zu deaktivieren, &ouml;ffne im Men&uuml; die Einstellungen oder die Datein lib/config___settings.php und setze unter enableRegistration auf false, danach lade die Seite erneut.",
"Registration mode enabled" => "Registrierungsmodus aktiviert",
"auto-check for updates" => "Automatisch nach Update suchen",
"To put into..." => "Um den Mehrbenutzermodus zu aktivieren, &ouml;ffne im Men&uuml; die Einstellungen oder die Datein lib/config___settings.php und setze unter multiUser auf true, danach lade die Seite erneut",
"multi-user" => "Mehrbenutzermodus"
),
"multiple-results" =>
array(
"rename all" => "Alle umbenennen",
"replace all" => "Alle ersetzen",
"document" => "Dokument",
"Found" => "Gefunden",
"times" => "",
"replace" => "ersetzen",
"file folder" => "Datei/Verzeichnis",
"rename to" => "Umbenennen nach",
"rename" => "Umbenennen",
"file" => "Datei",
"No matches found" => "Nichts gefunden",
"selected" => "Ausgew&auml;hlte",
"found in" => "Gefunden in",
"Replaced" => "Ersetzen"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder muss neu geladen werden, damit das Plugin genutzt werden kann. Jetzt neu laden?",
"saving plugins" => "speichere Plugins ...",
"Cannot update config..." => "Kann die Konfigurationsdatei nicht aktualisieren. Bitte Schreibrechte vergeben",
"and try again" => "und es nochmal versuchen",
"couldnt delete dir" => "kann Verzeichnis nicht l&ouml;schen",
"couldnt delete file" => "kann Datei nicht l&ouml;schen",
"plugins" => "Plugins",
"Guide to writing..." => "Anleitung zum Erstellen von Plugins",
"Manage Installed" => "Gef&uuml;hrte Installtion",
"URL" => "URL",
"Target" => "Ziel",
"Timer" => "Timer",
"Update" => "Update",
"Install" => "Installieren",
"Uninstall" => "Deinstallieren",
"Reload after install..." => "Neuladen nach der Installation erforderlich"
),
"properties" =>
array(
"properties" => "Eigenschaften",
"Size" => "Gr&ouml;&szlig;e",
"Modified" => "Ver&auml;ndert",
"Last access" => "Letzter Zugriff",
"Type" => "Typ",
"Readable Writeable" => "Lesbar / Schreibbar",
"Relative path" => "Relativer Pfad",
"Absolute path" => "Absoluter Pfad",
"Contains" => "Beinhaltet",
"Permissions" => "Berechtigungen",
"Owner" => "Besitzer",
"Group" => "Gruppe",
"Public" => "&Ouml;ffentlich",
"Read" => "Lesen",
"Write" => "Schreiben",
"Execute" => "Ausf&uuml;hren",
"Change to" => "&Auml;ndern um",
"update" => "aktualisieren"
),
"settings-common" =>
array(
"Your document does..." => "Das Dokument scheint nicht in UTF-8 codiert zu sein, darum wurde es angepasst"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "Kann Konfigurationsdatei nicht aktualisieren. Bitte Schreibrechte vergeben",
"and try again" => "und versuch es noch mal"
),
"settings-screen" =>
array(
"settings" => "Einstellungen",
"version" => "Version",
"website" => "Website",
"git" => "git",
"codemirror dir" => "CodeMirror Verzeichnis",
"codemirror version" => "CodeMirror Version",
"file manager root" => "Stammverzeichnis vom Dateimanager",
"Free to use..." => "Kostenfrei nutzbar, kommerziell oder nicht. Gebt mir Bescheid &uuml;ber eure Nutzung oder Anpassungen. :)<br><br>Keine Garantie oder Haftung, Nutzung auf eigene Gefahr.<br><br>Viele fantastische Leute und Unternehmen haben dabei geholfen ICEcoder zu dem zu machen, was es heute ist. Und es sind zu viele um ihnen einzelen zu danken. Eine vollst&auml;ndige Liste gibt es unter",
"functionality" => "Funktionalit&auml;t",
"check for updates..." => "Bei jedem Ladem nach Updates suchen",
"auto open last..." => "Lade automatisch alle zuletzt ge&ouml;ffneten Datein beim Login",
"when finding in..." => "bei der Suche in Dateien ausschlie&szlig;en",
"assisting" => "Assistenten",
"code assist" => "Codeassistent",
"visible tabs" => "sichtbare Tabs",
"locked nav" => "gesperrte Navigation",
"tag wrapper command" => "Kommando f&uuml;r Tag Wrapper",
"auto-complete on" => "Auto-Vervollst&auml;ndigen mit",
"security" => "Sicherheit",
"new password" => "neues Passwort",
"8 chars min" => "8 Zeichen mindestens",
"confirm password" => "Passwort best&auml;tigen",
"banned files/folders" => "verbannte Dateien/Verzeichnisse",
"banned paths" => "verbannte Verzeichnisse",
"ip addresses" => "IP Adressen",
"Slash prefixed comma..." => "Schr&auml;gstrich vorangestellt, durch Komma getrennt",
"Comma delimited" => "Komma getrennt",
"style" => "Style",
"theme" => "Theme",
"line wrapping" => "Zeilenumbruch",
"indent type" => "Einr&uuml;ckung mit",
"indent size" => "Tabweite",
"font size" => "Schriftgr&ouml;&szlig;e",
"auto indent" => "auto indent",
"layout" => "Layout",
"plugin panel aligned" => "Ausrichtung Plugin-Panel",
"file manager" => "Dateimanager",
"root" => "Stammordner",
"Slash prefixed" => "Schr&auml;gstrich vorangestellt",
"bug reporting" => "Fehlermeldung",
"check in files" => "Dateien einchecken",
"every" => "jeden",
"secs getting last" => "Sekunden, immer zuletzt",
"lines" => "Zeilen",
"multi-user" => "Mehrbenutzer",
"Make sure you..." => "Sei sicher, dass du dich nicht selber aussperrst",
"Registration" => "Registrieren",
"auth token" => "Authentifizierungs-Token",
"Required to get..." => "Notwendig f&uuml;r diffs, commits des bei GitHub gehosteten Repository usw.. Wenn du keinen hast, kannst du einen:".PHP_EOL.PHP_EOL.
"- pers&ouml;nlichen Zugriffs Token (https://help.github.com/articles/creating-an-access-token-for-command-line-use) erstellen, oder".PHP_EOL.
"- Full Client/geheimen Token (http://developer.github.com/v3/oauth) erstellen.".PHP_EOL.PHP_EOL.
"Es ist nicht zu empfehlen den Token hier zu speichern, sondern wenn ICEcoder dazu auffordert. Dadurch gilt der Token immer nur pro Sitzung.".PHP_EOL.PHP_EOL.
"Jedoch, wenn du in einer sicheren und vertrauensvollen Umgebung (privater PC, Laptop, ..) arbeitest, ist es Sinnvoll ihn hier einzugeben.",
"Sorry cannot commit..." => "Entschuldigung, kann Einstellungen im Demo-Modus nicht &uuml;bernehmen",
"update" => "aktualisieren"
),
"settings-update" =>
array(
"Cannot update config..." => "Kann Konfigurationsdatei nicht aktualisieren. Bitte Schreibrechte vergeben",
"and try again" => "und versuch es noch einmal",
"and press refresh" => "und dr&uuml;ck Neu laden"
),
"updater" =>
array(
"Update appears to..." => "Update scheint erolgreich gelaufen zu sein"
)
);
?>

437
lang/italian.php Normal file
View File

@@ -0,0 +1,437 @@
<?php
// Italian language translation
// by: @pietrondo (GitHub)
// @pietrobravo (Twitter)
// blog.pietrocapriata.me (sito web)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>Clicca le icone<br>per l&#39;aiuto &amp;<br>la guida</b>",
"server" => "server",
"Server name, OS..." => "Nome server, Sistema operativo e indirizzo IP...",
"Root" => "Root:",
"ICEcoder root" => "ICEcoder root:",
"PHP version" => "Versione PHP",
"Date & time" => "Ora e data:",
"your device" => "dispositivo in uso",
"Browser" => "Browser:",
"Your IP" => "Il tuo IP:",
"files" => "file",
"Last 10 files..." => "Ultimi 10 file aperti:",
"none" => "[none]",
"test suite" => "prova suite",
"Run unit tests" => "Esegui test di unità",
"dev mode" => "modalit&agrave; sviluppo",
"Status" => "Stato",
"Using" => "Utilizzo",
"You can switch..." => "&Egrave; possibile attivare/disattivare la modalit&agrave; sviluppo nel file lib/config__settings.php"
),
"files" =>
array(
"Lock" => "Blocca",
"Refresh" => "Aggiorna",
"ROOT" => "[ROOT]"
),
"index" =>
array(
"UPDATE INFO" => "INFORMAZIONI AGGIORNAMENTO",
"now available" => "&Egrave;ora disponibile",
"Your version is" => "La tua versione Egrave;",
"Update now" => "Aggiorna ora",
"You have some..." => "Ci sono modifiche non salvate",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "working",
"Color picker" => "Selettore di colore",
"New File" => "Nuovo file",
"New Folder" => "Nuova cartella",
"Upload File(s)" => "Carica File",
"Paste" => "Incolla",
"Open" => "Apri",
"Copy" => "Copia",
"Duplicate" => "Duplica",
"Delete" => "Elimina",
"Rename" => "Rinomina",
"View Webpage" => "Visualizza la pagina web",
"Download" => "Download",
"Properties" => "Propiet&agrave;",
"File" => "File",
"Edit" => "Modifica",
"Remote" => "Remoto",
"Help" => "Aiuto",
"Save" => "Salva",
"Save As" => "Salva come",
"Live Preview" => "Anteprima",
"Upload" => "Upload",
"Zip" => "Comprimi",
"Print" => "Stampa",
"Fullscreen toggle" => "Modalit&agrave; schermo intero",
"Logout" => "Logout",
"Undo" => "Annulla",
"Redo" => "Riesegui",
"Indent more" => "Aumenta rientro",
"Indent less" => "Riduci rientro",
"Autocomplete" => "Autocompleta",
"Comment/Uncomment" => "Commenta/Rimuovi commento",
"Jump to Definition" => "Vai alla Definizione",
"Manual" => "Manuale",
"Shortcuts" => "Scorciatorie",
"Settings" => "Configurazione",
"Search for selected" => "Cerca selezionato",
"website" => "sito web",
"Close all tabs" => "Chiudi tutte le schede",
"Alphabetize tabs" => "Ordina le schede",
"Find" => "Trova",
"in" => "in",
"and" => "e",
"replace" => "sostituisci",
"replace all" => "sostituisci tutto",
"this document" => "questo documento",
"open documents" => "apri documenti",
"all files" => "tutti i file",
"all filenames" => "tutti i nomi",
"Turn on/off..." => "Attiva/disattiva code assist",
"Code Assist" => "Code Assist",
"Go to Line" => "Vai alla linea",
"View" => "Visualizza",
"Bug reporting not active" => "Segnalazione bug non attiva"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Trovato in:"
),
"file-control" =>
array(
"Sorry" => "Spiacente",
"does not seem..." => "non sembra esistere sul server",
"Sorry, could not..." => "Siamo spiacenti, non è possibile ottenere i contenuti di",
"Sorry, cannot create..." => "Siamo spiacenti, non è possibile creare una cartella a",
"Sorry, cannot copy" => "Siamo spiacenti, non è possibile copiare",
"into" => "into",
"Uploaded file(s) OK" => "Upload file Ok",
"Sorry, cannot upload" => "Siamo spiacenti, non è possibile caricare",
"Sorry, cannot upload..." => "Siamo spiacenti , non è possibile caricare mentre in modalità demo",
"Sorry, cannot rename" => "Siamo spiacenti , non è possibile rinominare",
"Maybe public write..." => "Forse sono necessari permessi di scrittura pubblica su questa o sulla cartella principale??",
"Sorry, cannot move" => "Siamo spiacenti, non è possibile muovere",
"Sorry, cannot save" => "Siamo spiacenti, non è possibile salvare",
"Sorry, cannot replace..." => "Siamo spiacenti, non è possibile sostituire il testo",
"Sorry, cannot change..." => "Siamo spiacenti, non è possibile cambiare i permessi",
"Sorry, cannot delete..." => "Siamo spiacenti, non è possibile cancellare la cartella root",
"Sorry, cannot delete" => "Siamo spiacenti, non è possibile cancellare",
"Sorry, this file..." => "Siamo spiacenti, questo file è stato cambiato, non è possibile salvarlo",
"Reload this file..." => "Ricarica questo file e copia la tua versione in un pannello differente",
"There was a..." => "C'è stato un problema tecnico, probabilmente qualcosa che non era ancora pronto. Così ICEcoder ha ricaricato di nuovo il file.",
"displayed at" => "visualizzato in",
"Enter filename to..." => "Inserisci il nome del file da salvare in",
"That file exists..." => "Questo file esiste già, sovrascrivere??",
"Saving" => "Stiamo salvando"
),
"get-branch" =>
array(
"There are no..." => "Non ci sono differenze tra il repo locale e GitHub. Tornare alla modalità normale??",
"Sorry, there was..." => "Spiacente, c'è stato un errore, il codice:",
"Your local folder..." => "La cartella locale è vuota, ti piacerebbe clonare"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "Siamo spiacenti, non è possibile creare la cartella in",
"Cannot update config..." => "Impossibile aggiornare il file di configurazione. Si prega di impostare i permessi di scrittura pubblica su",
"and try again" => "e prova ancora",
"saving github paths" => "salvando il percorso di github...",
"github paths" => "percorso di github",
"Choose existing path" => "Scegli il percorso esistente",
"Local path" => "Percorso locale",
"Remote GitHub path" => "Remote GitHub path",
"Choose" => "Scegli",
"Set local and..." => "Imposta percorso locale e remoto, lasciare vuoto per per rimuovere",
"Update" => "Aggiorna",
"Add new path" => "Aggiungi nuovo percorso",
"Add" => "Aggiungi",
"Usage Info" => "Usage Info:",
"Enter relative local..." => "Inserisci percorsi locali relativi (ad esempio / server / myfiles) e percorsi assoluti GitHub (ad es https://github.com/user/repo o https://github.com/user/repo/tree/branch per le filiali), come da gli esempi.",
"You can then..." => "È quindi possibile scegliere un percorso e questo allora diventa il tuo nuovo percorso principale in ICEcoder.",
"The file manager..." => "Il file manager visualizza una nuova icona GitHub, su cui è possibile fare clic su per eseguire e mostrare un controllo diff tra le 2 fonti. Questi diff possono essere validati e inviati al percorso remoto a GitHub o clonati in un percorso locale, per la sincronizzazione dei file.",
"If you want..." => "If you want to set another root path, this can be done in the Settings screen."
),
"github" =>
array(
"Sorry, you do..." => "Siamo spiacenti, non sembra avere OpenSSL caricato nella vostra installazione PHP, quindi https non è disponibile. Questo è necessario per GitHub il trasferimento dei dati, si prega di modificare le impostazioni di php.ini, di riavviare il server e riprovare"
),
"headers" =>
array(
"Bad CSRF token..." => "Bad CSRF token. Per favore riporta l'errore a https://github.com/mattpass/ICEcoder così che possa essere fixato."
),
"help" =>
array(
"shortcuts" => "shortcuts",
"Within document" => "all'interno del documento",
"On Tabs" => "Sulle Tabs",
"Within file manager" => "All'interno del file manager",
"Anywhere" => "Dappertutto",
"Space" => "Spazio",
"Click" => "Click",
"or" => "o",
"Left click" => "Click Sinistro",
"Middle click" => "Click centrale",
"Double click tap..." => "Doppio click / tap (mobile)",
"Right click" => "Click Destro",
"Middle scrollwheel" => "scrollwheel Medio",
"Drag" => "Trascina",
"Autocomplete add snippet" => "Completamento automatico / aggiungi snippet",
"Multiple select" => "Selezione multiple",
"Move line up" => "Vai alla linea sopra",
"Move line down" => "Vai alla linea sotto",
"Duplicate lines" => "Duplica linea(e)",
"Remove lines" => "Rimuovi linea(e)",
"Insert line before" => "Inserisci linea prima di",
"Insert line after" => "Inserisci linea dopo di",
"Search for selected" => "Cerca selezionati",
"Jump to definition" => "Vai a definizione / torna indietro",
"Comment uncomment" => "Commento / decommenta",
"Insert tab indent" => "Inserisci tab / rientro selezionato",
"Wrap with div" => "Includi con &lt;div&gt;",
"Wrap with span" => "Includi &lt;span&gt;",
"Wrap unwrap p" => "Includi / escludi con &lt;p&gt;",
"Wrap unwrap a" => "Includi / escludi con &lt;a&gt;",
"Wrap unwrap b" => "Includi / escludi con &lt;b&gt;",
"Wrap unwrap i" => "Includi / escludi con &lt;i&gt;",
"Wrap unwrap strong" => "Includi / escludi con &lt;strong&gt;",
"Wrap unwrap em" => "Includi / escludi con &lt;em&gt;",
"Wrap unwrap li" => "Includi / escludi con &lt;li&gt;",
"Wrap unwrap h1..." => "Includi / escludi con &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "Finisci la linea con &lt;br&gt;",
"Close tab" => "Chiudi tab",
"Select file folder" => "Seleziona file, cartella",
"Open file" => "Apri file",
"Range select" => "Seleziona range",
"Options for selected" => "Opzioni per selezionati",
"Delete selected" => "Elimina selezionati",
"Next previous tab" => "Tab successiva / precedente",
"Next tab" => "Tab successiva",
"Previous tab" => "Tab precedente",
"New tab" => "Nuova tab",
"Close current tab" => "Chiudi tab corrente",
"Open file prompt" => "Open file prompt",
"Find" => "Trova",
"Focus on Go..." => "Focus on Go to line input",
"Save" => "Salva",
"Save as" => "Salva come...",
"View webpage" => "Vedi pagina web",
"Contract expand file..." => "Contrai / espandi file manager",
"Fold unfold current..." => "Piega / dispiega riga corrente",
"Refocus on document" => "Refocus sul documento",
"Cancel tasks" => "Cancella compito"
),
"ice-coder" =>
array(
"No text selected..." => "Nessun testo selezionato per la ricerc",
"all files" => "tutti i file",
"all filenames" => "tutti i nomi dei file",
"selected files" => "seleziona file",
"selected filenames" => "seleziona nomi dei file",
"Creating Folder" => "Sto creando una cartla",
"Sorry you can..." => "Spiacente, puoi avere solo 100 file aperti a volta!",
"Opening File" => "Apertura file",
"Enter relative file..." => "Digita il percorso relativo (con / di prefisso) o l'url remoto",
"Getting" => "Getting",
"Please enter the..." => "Per favore digita un nuovo nome per",
"Renaming to" => "Rinominando a ",
"Moving to" => "Muovendo a",
"Deleting File" => "Eliminando file",
"Pasting File" => "Incollando file",
"Sorry cannot paste..." => "Spiacente, ma non puoi copiare un intera radice",
"Nothing to paste..." => "Niente da copiare, copia prima un file o una cartella!",
"and" => "e",
"this document" => "questo documento",
"replace" => "sostituisci",
"replace all" => "sostituisci tutto",
"file" => "file",
"Replacing text in" => "Sostituisci il testo con",
"Cancelled tasks" => "Compiti cancellati",
"Open previous files" => "Aprire i file precedenti?",
"Please enter your..." => "Please enter your GitHub token (either personal access token or client/secret pair token). See tooltip next to Github Auth Token on Help > Settings screen for more info",
"This will compare..." => "Questo confronterà e mostrarà la diff tra il dir locale e il repository. Ok?",
"Please note for..." => "Si prega di notare: affinche l'aggiornamento funzioni correttamente, è necessario disporre dei permessi di scrittura e cancellazione su tutti le cartelle e file di ICEcoder e. Se è necessario ripristinare questa versione di ICEcoder per qualsiasi motivo, lo troverete nella directory / tmp dir. Fare clic su OK per procedere con l'aggiornamento automatico o annullare a visitare il sito ICEcoder in modo da poter utilizzare la zip e aggiornare manualmente.",
"You can start..." => "Puoi ripoertare il bug in Help > Settings",
"Error cannot find..." => "Error: cannot find/access the error file paths",
"No new errors..." => "Nessun nuovo errore trovato",
"You have made..." => "Hai fatto alcuni cambiamenti. Sei sicuro che vuoi chiudere senza prima salvare?",
"Close all tabs" => "Chiudere tutte le tabs?",
"results" => "risultati"
),
"login" =>
array(
"set password" => "imposta password",
"login" => "login",
"To disable registration..." => "Per disattivare la modalità di registrazione, apri il menu delle impostazioni o aprire lib/config___settings.php e cambia enableRegistration in false quindi ricarica questa pagina",
"Registration mode enabled" => "Modalità di registrazione abilitata",
"auto-check for updates" => "auto-check per aggiornamenti",
"To put into..." => "Per mettere in modalità multi-utente, aprire il menu delle impostazioni o apri lib / config ___ settings.php e cambiare multiutente su true quindi ricarica questa pagina",
"multi-user" => "multi-user"
),
"multiple-results" =>
array(
"rename all" => "rename all",
"replace all" => "replace all",
"document" => "document",
"Found" => "Found",
"times" => "times",
"replace" => "replace",
"file folder" => "file/folder",
"rename to" => "rename to",
"rename" => "rename",
"file" => "file",
"No matches found" => "No matches found",
"selected" => "selected",
"found in" => "found in",
"Replaced" => "Replaced"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder needs to reload to make this plugin usable. Reload now?",
"saving plugins" => "saving plugins...",
"Cannot update config..." => "Cannot update config file. Please set public write permissions on",
"and try again" => "and try again",
"couldnt delete dir" => "could not delete dir",
"couldnt delete file" => "could not delete file",
"plugins" => "plugins",
"Guide to writing..." => "Guide to writing plugins",
"Manage Installed" => "Manage Installed",
"URL" => "URL",
"Target" => "Target",
"Timer" => "Timer",
"Update" => "Update",
"Install" => "Install",
"Uninstall" => "Uninstall",
"Reload after install..." => "Reload after install required"
),
"properties" =>
array(
"properties" => "Proprietà",
"Size" => "Dimensione",
"Modified" => "Modificato",
"Last access" => "Ultimo accesso",
"Type" => "Type",
"Readable Writeable" => "Leggibile / Scrivibile",
"Relative path" => "Percorso relativo",
"Absolute path" => "Percorso assoluto",
"Contains" => "Contiene",
"Permissions" => "Permessi",
"Owner" => "Proprietario",
"Group" => "Gruppo",
"Public" => "Pubblico",
"Read" => "Lettura",
"Write" => "Scrittura",
"Execute" => "Esecuzione",
"Change to" => "Cambia a",
"update" => "aggiorna"
),
"settings-common" =>
array(
"Your document does..." => "Il tuo documento non sembra essere in formato UTF-8 per questo viene corretto"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "Impossibile aggiornare il file di configurazione. Si prega di impostare i permessi di scrittura pubblica su",
"and try again" => "e prova ancora"
),
"settings-screen" =>
array(
"settings" => "settings",
"version" => "versione",
"website" => "sito web",
"git" => "git",
"codemirror dir" => "dir codemirror ",
"codemirror version" => "versione codemirror ",
"file manager root" => "root di file manager ",
"Free to use..." => "Libero di usarlo per i propri scopi, commerciali e non, facendomelo solo sapere per eventuali nuovi e interessanti utilizzi o personalizzazioni. :) <br> Nessuna garanzia o responsabilità, tutte le responsabilità di utilizzo è vostra. <br> Un sacco di aziende e persone fantastiche hanno contribuito a costruire ICEcoder e ce ne sarebbero troppi da ringraziare. Si prega di consultare la lista completa a",
"functionality" => "funzionalità",
"check for updates..." => "controlla aggiornamenti all'avvio",
"auto open last..." => "Apri automaticamente ultimi file al login",
"when finding in..." => "quando trovi nei file, escludi",
"assisting" => "assisting",
"code assist" => "code assist",
"visible tabs" => "tab visibili",
"locked nav" => "navigazione bloccata",
"tag wrapper command" => "tag wrapper command",
"auto-complete on" => "auto-completamento attivo",
"security" => "sicurezza",
"new password" => "nuova password",
"8 chars min" => "8 caratteri minimo",
"confirm password" => "conferma password",
"banned files/folders" => "file e cartelle vietati",
"banned paths" => "percorsi vietati",
"ip addresses" => "indirizzo ip",
"Slash prefixed comma..." => "slash di prefisso, delimitato da virgole",
"Comma delimited" => "delimitato da virgole",
"style" => "style",
"theme" => "tema",
"line wrapping" => "a capo automatico",
"indent type" => "tipo di rientro",
"indent size" => "dimensioni rientro",
"font size" => "dimensione font ",
"auto indent" => "auto indent",
"layout" => "layout",
"plugin panel aligned" => "Pannello plug inallineato",
"file manager" => "file manager",
"root" => "root",
"Slash prefixed" => "barra obliqua prefisso",
"bug reporting" => "bug reporting",
"check in files" => "check in files",
"every" => "ogni",
"secs getting last" => "secs, getting last",
"lines" => "linee",
"multi-user" => "multi-user",
"Make sure you..." => "Assicurati di non bloccarti fuori",
"Registration" => "Registrazione",
"auth token" => "auth token",
"Required to get..." => "Necessario per ottenere diff, validare il votro repo GitHub ospitato ecc Se non ne avete uno, è possibile utilizzare un:".PHP_EOL.PHP_EOL.
"-
token di accesso personale (https://help.github.com/articles/creating-an-access-token-for-command-line-use), or".PHP_EOL.
"- full client/secret pair token (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"Non è consigliabile impostare il token qui e comunque è più sicuro inserirlo quando richiesto dal ICEcoder e verrà tenuto solamente durante la sessione.".PHP_EOL.PHP_EOL.
"However, if you work in a trusted and secure environment, it is more efficient to set it here.",
"Sorry cannot commit..." => "Siamo spiacenti, non è possibile modificare le impostazioni in modalità demo",
"update" => "aggiorna"
),
"settings-update" =>
array(
"Cannot update config..." => "Non posso aggiornare il file config. Per favore permetti l'accesso pubblico di scrittura",
"and try again" => "e prova ancora",
"and press refresh" => "e premi aggiorna"
),
"updater" =>
array(
"Update appears to..." => "L'aggiornamento sembra andato bene"
)
);
?>

428
lang/norwegian.php Normal file
View File

@@ -0,0 +1,428 @@
<?php
// Norwegian language translation
// by: @koseelg (GitHub)
// @koseelg (Twitter)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>Klikk på ikoner<br>for hjelp &<br>bruk av info</b>",
"server" => "server",
"Server name, OS..." => "Server navn, OS & IP:",
"Root" => "Root:",
"ICEcoder root" => "ICEcoder root:",
"PHP version" => "PHP versjon:",
"Date & time" => "Dato & tid:",
"your device" => "din enhet",
"Browser" => "Nettleser:",
"Your IP" => "Din IP:",
"files" => "filer",
"Last 10 files..." => "Siste 10 åpne filer:",
"none" => "[none]",
"test suite" => "test suite",
"Run unit tests" => "Kjør unit tests",
"dev mode" => "utvikler modus",
"Status" => "Status",
"Using" => "Brukes",
"You can switch..." => "Du kan slå utvikler modus på/av i lib/config__settings.php",
"results" => "resultater"
),
"files" =>
array(
"Lock" => "Steng",
"Refresh" => "Last igjen",
"ROOT" => "[ROOT]"
),
"index" =>
array(
"UPDATE INFO" => "UPDATE INFO",
"now available" => "Nå tilgjengelig",
"Your version is" => "Din versjon er",
"Update now" => "Oppdater nå",
"You have some..." => "Du har noe ulagrede endringer",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "arbeider",
"Color picker" => "Fargevelger",
"New File" => "Ny Fil",
"New Folder" => "Ny Mappe",
"Upload File(s)" => "Last opp Fil(er)",
"Paste" => "Lim inn",
"Open" => "Åpne",
"Copy" => "Kopier",
"Duplicate" => "Duplikat",
"Delete" => "Slett",
"Rename" => "Gi annet navn",
"View Webpage" => "Vis Webside",
"Download" => "Last ned",
"Properties" => "Egenskaper",
"File" => "Fil",
"Edit" => "Redigere",
"Remote" => "Ekstern",
"Help" => "Hjelp",
"Save" => "Lagre",
"Save As" => "Lagre Som",
"Live Preview" => "Direkte Forhåndsvisning",
"Upload" => "Last opp",
"Zip" => "Zip",
"Print" => "Skriv ut",
"Fullscreen toggle" => "Fullskjerm svitsj",
"Logout" => "Loggut",
"Undo" => "Angre",
"Redo" => "Gjenta",
"Indent more" => "Større innrykk",
"Indent less" => "Mindre innrykk",
"Autocomplete" => "Autokomplettere",
"Comment/Uncomment" => "Kommentar/Fjern Kommentar",
"Jump to Definition" => "Hopp til Definisjon",
"Manual" => "Manual",
"Shortcuts" => "Snarveier",
"Settings" => "Innstillinger",
"Search for selected" => "Søk for utvalgte",
"website" => "webside",
"Close all tabs" => "Lukk alle faner",
"Alphabetize tabs" => "Ordne faner alfabetisk",
"Find" => "Finn",
"in" => "i",
"and" => "og",
"replace" => "erstatt",
"replace all" => "erstatt alt",
"this document" => "dette dokumentet",
"open documents" => "åpne dokumenter",
"all files" => "alle filer",
"all filenames" => "alle filenavn",
"Turn on/off..." => "Svitsj på/av kode assistenten",
"Code Assist" => "Kode Assistenten",
"Go to Line" => "Gå til Linje",
"View" => "Vis",
"Bug reporting not active" => "Bug rapportering ikke aktiv"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Funnet i:"
),
"file-control" =>
array(
"Sorry" => "Beklager",
"does not seem..." => "synes ikke å eksistere på serveren",
"Sorry, could not..." => "Beklager, kunne ikke få innholdet i",
"Sorry, cannot create..." => "Beklager, kan ikke opprette mappe på",
"Sorry, cannot copy" => "Beklager, kan ikke kopiere",
"into" => "inn",
"Uploaded file(s) OK" => "Opplastete fil(er) OK",
"Sorry, cannot upload" => "Beklager, kan ikke laste opp",
"Sorry, cannot upload..." => "Beklager, kan ikke laste opp i demo-modus",
"Sorry, cannot rename" => "Beklager, kan ikke endre navn",
"Maybe public write..." => "Kanskje det trengs offentlige skriverettigheter på denne, eller overordnede mappen?",
"Sorry, cannot move" => "Beklager, kan ikke flytte",
"Sorry, cannot save" => "Beklager, kan ikke lagre",
"Sorry, cannot replace..." => "Beklager, kan ikke erstatte tekst i",
"Sorry, cannot change..." => "Beklager, kan ikke endre tillatelser på",
"Sorry, cannot delete..." => "Beklager, kan ikke slette rotnivå",
"Sorry, cannot delete" => "Beklager, kan ikke slette",
"Sorry, this file..." => "Beklager, denne filen er endret, kan ikke lagre",
"Reload this file..." => "Skal denne filen lastes igjen og kopieres denne versjon til et nytt dokument?",
"There was a..." => "Dette var en teknisk hikke, sannsynligvis var noe ikke helt klar. Så ICEcoder laster sin kontrollfil på nytt.",
"displayed at" => "vises på",
"Enter filename to..." => "Skriv inn filnavnet for å lagre på",
"That file exists..." => "Denne filen eksisterer allerede, skriv over?",
"Saving" => "Lagring"
),
"get-branch" =>
array(
"There are no..." => "Det er ingen forskjeller mellom det lokale og GitHub lagringssted. Gå tilbake til vanlig modus?",
"Sorry, there was..." => "Beklager, det var en feil, kode:",
"Your local folder..." => "Din lokale mappe er tom, ønsker du å klone"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "Beklager, kan ikke opprette mappe på",
"Cannot update config..." => "Kan ikke oppdatere konfigurasjonsfilen. Vennligst sett offentlige skriverettigheter",
"and try again" => "og prøv igjen",
"saving github paths" => "lagre GitHub stier...",
"github paths" => "github stier",
"Choose existing path" => "Velg eksisterende sti",
"Local path" => "Lokal sti",
"Remote GitHub path" => "Ekstern GitHub sti",
"Choose" => "Velg",
"Set local and..." => "Sett lokal og ekstern sti til tomt, for å fjerne",
"Update" => "Oppdater",
"Add new path" => "Legg til ny sti",
"Add" => "Legg til",
"Usage Info" => "Bruksinfo:",
"Enter relative local..." => "Oppgi relative lokale stier (f.e. /server/myfiles) og absolutte GitHub stier (f.e. https://github.com/user/repo eller https://github.com/user/repo/tree/branch for grener), som eksemplene. Med dette har du etablert kildestier på begge steder, som et par.",
"You can then..." => "Du kan deretter velge en stipar og dette blir da den nye rot stien i ICEcoder.",
"The file manager..." => "Filbehandleren viser deretter et nytt GitHub-ikon, som du kan klikke på, for å utføre en sjekk og vise forskjell mellom de 2 kildene. Disse forskjellene kan da være påkrevd, og flyttes til den eksterne stien på GitHub eller klones til din lokale sti, for å synkronisere filene dine.",
"If you want..." => "Hvis du ønsker å velge en annen root sti, kan dette gjøres i skjermbildet Innstillinger."
),
"github" =>
array(
"Sorry, you do..." => "Beklager, det ser ikke ut til å ha lastet inn OpenSSL på PHP instans, så https er ikke tilgjengelig. Dette er nødvendig for GitHub dataoverføring, du kan endre php.ini innstillingene, start serveren på nytt og prøv igjen"
),
"headers" =>
array(
"Bad CSRF token..." => "Bad CSRF token. Vennligst rapporter feilinfoen på https://github.com/mattpass/ICEcoder slik at det kan fikses."
),
"help" =>
array(
"shortcuts" => "snarveier",
"Within document" => "Innenfor dokument",
"On Tabs" => "På faner",
"Within file manager" => "Innenfor filbehandler",
"Anywhere" => "Hvor som helst",
"Space" => "Mellomrom",
"Click" => "Klikk",
"or" => "eller",
"Left click" => "Venstre klikk",
"Middle click" => "Middel klikk",
"Double click tap..." => "Dobbel klikk / tap (mobil)",
"Right click" => "Høyre klikk",
"Middle scrollwheel" => "Middel rullehjul",
"Drag" => "Dra",
"Autocomplete add snippet" => "Autofullfør/legg til kodebiten",
"Multiple select" => "Flere valg",
"Move line up" => "Flytt linje opp",
"Move line down" => "Flytt linje ned",
"Duplicate lines" => "Dupliser linje(r)",
"Remove lines" => "Slett linje(r)",
"Insert line before" => "Sett inn linje før",
"Insert line after" => "Sett inn linje etter",
"Search for selected" => "Søk etter valgt",
"Jump to definition" => "Hopp til definisjon/hopp tilbake",
"Comment uncomment" => "Kommentar/fjern kommentar",
"Insert tab indent" => "Sett inn innrykk/valgt innrykk",
"Wrap with div" => "Wrap med <div>",
"Wrap with span" => "Wrap med <span>",
"Wrap unwrap p" => "Wrap/uwrap med <p>",
"Wrap unwrap a" => "Wrap/uwrap med <a>",
"Wrap unwrap b" => "Wrap/uwrap med <b>",
"Wrap unwrap i" => "Wrap/uwrap med <i>",
"Wrap unwrap strong" => "Wrap/uwrap med <strong>",
"Wrap unwrap em" => "Wrap/uwrap med <em>",
"Wrap unwrap li" => "Wrap/uwrap med <li>",
"Wrap unwrap h1..." => "Wrap/uwrap med <h1> - <h3>",
"End line with..." => "Avslutt linje med <br>",
"Close tab" => "Lukk fane",
"Select file folder" => "Velg fil/mappe",
"Open file" => "Åpne fil",
"Range select" => "Velg område",
"Options for selected" => "Egenskaper for valgt",
"Delete selected" => "Slett valgt",
"Next previous tab" => "Neste/forige fane",
"Next tab" => "Neste fane",
"Previous tab" => "Forige fane",
"New tab" => "Ny fane",
"Close current tab" => "Lukk gjeldende fane",
"Open file prompt" => "Åpne fil prompt",
"Find" => "Finn",
"Focus on Go..." => "Fokus på Gå til linje inndata",
"Save" => "Lagre",
"Save as" => "Lagre som...",
"View webpage" => "Vis webside",
"Contract expand file..." => "Trekk sammen/utvid filbehandler",
"Fold unfold current..." => "Brett/utfold gjeldende linje",
"Refocus on document" => "Refokusere på dokument",
"Cancel tasks" => "Avbryt oppgaver"
),
"ice-coder" =>
array(
"No text selected..." => "Ingen tekst valgt til å søke på",
"Creating Folder" => "Lage mappe",
"Sorry you can..." => "Beklager, du kan bare ha 100 filer åpne samtidig!",
"Opening File" => "Åpner Fil",
"Enter relative file..." => "Oppgi den relative filstien (med prefiks /) eller ekstern URL",
"Getting" => "Får",
"Please enter the..." => "Skriv inn det nye navnet på",
"Renaming to" => "Endre navn til",
"Moving to" => "Flytt til",
"Deleting File" => "Slett Fil",
"Pasting File" => "Lim inn Fil",
"Sorry cannot paste..." => "Beklager, kan ikke lime inn en hel rot mappe",
"Nothing to paste..." => "Ingenting å lime inn, kopiere en fil/mappe først!",
"Replacing text in" => "Erstatte tekst i",
"Cancelled tasks" => "Kansellerte oppgaver",
"Open previous files" => "Åpne siste filer?",
"Please enter your..." => "Skriv inn GitHub token (enten personlig tilgang token eller kunde/hemmelig par token). Se verktøytips ved siden av Github Auth Token på Hjelp-skjermbildet > Innstillinger for mer info",
"This will compare..." => "Det vil sammenlignes og vise en forskjell mellom din lokale mappe og lagringsstedet. OK?",
"Please note for..." => "Vennligst merk: for at oppdatering skal fungere skikkelig, må du ha skrive/slette tilgang til alle ICEcoder kataloger og filer. Hvis du trenger å gjenopprette denne versjonen av ICEcoder av en eller annen grunn, vil du finne den i /tmp mappen. Klikk OK for å fortsette med en auto-oppdatering eller avbryt for å besøke ICEcoder området slik at du kan ta tak i zip-filen og oppdatere manuelt.",
"You can start..." => "Du kan starte feilrapportering i Hjelp > Innstillinger",
"Error cannot find..." => "Feil: kan ikke finne/få tilgang til feil filstier",
"No new errors..." => "Ingen feil funnet",
"You have made..." => "Du har gjort endringer. Er du sikker på, at du vil lukke uten å lagre?",
"Close all tabs" => "Lukk alle faner?"
),
"login" =>
array(
"set password" => "sett passord",
"login" => "logginn",
"To disable registration..." => "Hvis du vil deaktivere registreringsmodus, åpne innstillingsmenyen eller åpne lib/config ___ settings.php og endre/aktiver Påmelding til 'false', deretter laste siden om igjen",
"Registration mode enabled" => "Registreringsmodus aktivert",
"auto-check for updates" => "auto-sjekk for oppdateringer",
"To put into..." => "Å sette til flerbrukermodus, åpne innstillingsmenyen eller åpne lib/config ___ settings.php og endre flerbruker til 'true', deretter laste siden om igjen",
"multi-user" => "flerbruker"
),
"multiple-results" =>
array(
"rename all" => "endre navn på alle",
"replace all" => "erstatte alle",
"document" => "dokument",
"Found" => "Funnet",
"times" => "ganger",
"replace" => "erstatte",
"file folder" => "fil/mappe",
"rename to" => "endre navn til",
"rename" => "endre navn",
"file" => "fil",
"No matches found" => "Ingen treff",
"selected" => "valgt",
"found in" => "funnet i",
"Replaced" => "Erstattet"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder må startes om igjen, for å gjøre programtillegget kjørbar. Start om igjen nå?",
"saving plugins" => "lagre programtillegg...",
"Cannot update config..." => "Kan ikke oppdatere konfigurasjonsfilen. Vennligst sett offentlige skriverettigheter",
"and try again" => "og prøv igjen",
"couldnt delete dir" => "kan ikke slette mappe",
"couldnt delete file" => "kan ikke slette fil",
"plugins" => "programtillegg",
"Guide to writing..." => "Guide til skriving av programtillegg",
"Manage Installed" => "Administrer installerte",
"URL" => "URL",
"Target" => "Mål",
"Timer" => "Tidsur",
"Update" => "Oppdater",
"Install" => "Installer",
"Uninstall" => "Avinstaller",
"Reload after install..." => "Omstart etter installasjon nødvendig"
),
"properties" =>
array(
"properties" => "egenskaper",
"Size" => "Størrelse",
"Modified" => "Endret",
"Last access" => "Siste tilgang",
"Type" => "Type",
"Readable Writeable" => "Lesbar/Skrivbar",
"Relative path" => "Relativ sti",
"Absolute path" => "Absolute sti",
"Contains" => "Inneholder",
"Permissions" => "Tillatelser",
"Owner" => "Eier",
"Group" => "Gruppe",
"Public" => "Offentlig",
"Read" => "Lese",
"Write" => "Skrive",
"Execute" => "Kjøre",
"Change to" => "Endre til",
"update" => "oppdatere"
),
"settings-common" =>
array(
"Your document does..." => "Dokumentet ser ikke ut til å være i UTF-8 koding, derfor har det blitt omgjort"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "Kan ikke oppdatere konfigurasjonsfilen. Vennligst sett offentlige skriverettigheter",
"and try again" => "og prøv igjen"
),
"settings-screen" =>
array(
"settings" => "innstillinger",
"version" => "versjon",
"website" => "webside",
"git" => "git",
"codemirror dir" => "codemirror mappe",
"codemirror version" => "codemirror versjon",
"file manager root" => "filbehandler root",
"Free to use..." => "Gratis å bruke den til eget formål, kommersielle eller ikke, bare gi meg beskjed om eventuelle kule bruk eller tilpasninger. :) <br>Ingen garanti eller erstatningsansvar aksepteres for noe som helst, det er ditt eget ansvar for all bruk.<br>Mange fantastiske mennesker og bedrifter har bidratt til å bygge ICEcoder og det er for mange å takke her. Vennligst se hele listen på",
"functionality" => "funksjonalitet",
"check for updates..." => "se etter oppdateringer ved start",
"auto open last..." => "åpne automatisk siste filer ved innlogging",
"when finding in..." => "når funnet blant filer, utelukke",
"assisting" => "assistere",
"code assist" => "code assistent",
"visible tabs" => "synlige faner",
"locked nav" => "låst navi",
"tag wrapper command" => "tag wrapper kommando",
"auto-complete on" => "autokompletering på",
"security" => "sikkerhet",
"new password" => "nytt passord",
"8 chars min" => "min. 8 tegn",
"confirm password" => "bekreft passord",
"banned files/folders" => "forbudte filer/mapper",
"banned paths" => "forbudte stier",
"ip addresses" => "ip adresser",
"Slash prefixed comma..." => "Slash som prefiks, komma som skille",
"Comma delimited" => "Skilled med komma",
"style" => "stil",
"theme" => "tema",
"line wrapping" => "linjebryting",
"indent type" => "innrykk type",
"indent size" => "innrykk størr.",
"font size" => "skrift størr.",
"auto indent" => "auto indent",
"layout" => "layout",
"plugin panel aligned" => "programtilleggspanel justert",
"file manager" => "filbehandler",
"root" => "root",
"Slash prefixed" => "Slash prefiks",
"bug reporting" => "feil rapportering",
"check in files" => "sjekke blant filer",
"every" => "hver",
"secs getting last" => "sek., får siste",
"lines" => "linjer",
"multi-user" => "flerbruker",
"Make sure you..." => "Pass på, at du ikke stenger deg ut selv",
"Registration" => "Registrering",
"auth token" => "auth token",
"Required to get..." => "Nødvendig for å skille, bestemme ditt lagringssted på GitHub lageret etc. Hvis du ikke har en, kan du bruke en:".PHP_EOL.PHP_EOL.
"- personal access token (https://help.github.com/articles/creating-an-access-token-for-command-line-use), eller".PHP_EOL.
"- full client/secret pair token (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"Det anbefales ikke, at du setter token din her midlertidig, og vær sikre på å oppgi den, når du blir bedt av ICEcoder, som vil holde den i økten sin.".PHP_EOL.PHP_EOL.
"Men hvis du jobber i et trygt og sikkert miljø, er det mer effektivt å sette den her.",
"Sorry cannot commit..." => "Beklager, kan ikke bekrefte innstillinger i demo-modus",
"update" => "oppdatere"
),
"settings-update" =>
array(
"Cannot update config..." => "Kan ikke oppdatere konfigurasjonsfilen. Vennligst sett offentlige skriverettigheter;",
"and try again" => "og prøv igjen",
"and press refresh" => "og trykk refresh"
),
"updater" =>
array(
"Update appears to..." => "Oppdatering synes å være vellykket"
)
);
?>

425
lang/persian.php Normal file
View File

@@ -0,0 +1,425 @@
<?php
// Persian language translation
// by: @voltan (GitHub)
// @azizabadi_ (Twitter)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>بر روی آیکن ها کلیک کنید<br>برای راهنمایی &amp;<br>اطلاعات استفاده</b>",
"server" => "سرور",
"Server name, OS..." => "نام سرور ، سیستم عامل و آی پی :",
"Root" => "روت:",
"ICEcoder root" => "ICEcoder روت :",
"PHP version" => "نسخه پی اچ پی:",
"Date & time" => "زمان و تاریخ :",
"your device" => "دستگاه شما",
"Browser" => "مرورگر :",
"Your IP" => "آی پی شما:",
"files" => "فایل ها",
"Last 10 files..." => "آخرین ۱۰ فایل باز شده",
"none" => "[پوچ]",
"test suite" => "تست سویت",
"Run unit tests" => "اجرای تست های واحد",
"dev mode" => "حالت توسعه دهنده",
"Status" => "وضعیت",
"Using" => "استفاده",
"You can switch..." => "شما میتوانید حالت توسعه را از lib/config__settings.php روشن یا خاموش کنید",
"results" => "نتایج"
),
"files" =>
array(
"Lock" => "قفل",
"Refresh" => "بارگذاری مجدد",
"ROOT" => "[ریشه]"
),
"index" =>
array(
"UPDATE INFO" => "اطلاعات به روز رسانی",
"now available" => "هم اکنون در دسترس است",
"Your version is" => "نسخه مورد استفاده شما",
"Update now" => "به روز کنید",
"You have some..." => "شما چند تغییر ذخیره نشده دارید",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "در حال کار",
"Color picker" => "اشاره گر رنگ",
"New File" => "فایل جدید",
"New Folder" => "پوشه جدید",
"Upload File(s)" => "بارگذاری فایل",
"Paste" => "چسباندن",
"Open" => "باز کردن",
"Copy" => "کپی کردن",
"Duplicate" => "تهیه نسخه دوم",
"Delete" => "حذف",
"Rename" => "تغیر نام",
"View Webpage" => "نمایش وب سایت",
"Download" => "دریافت",
"Properties" => "ویژگی ها",
"File" => "فایل",
"Edit" => "ویرایش",
"Remote" => "کنترل از راه دور",
"Help" => "کمک",
"Save" => "ذخیره",
"Save As" => "ذخیره به عنوان",
"Live Preview" => "پیش نمایش زنده",
"Upload" => "بارگذاری",
"Zip" => "زیپ",
"Print" => "چاپ",
"Fullscreen toggle" => "نمایش تمام صفحه",
"Logout" => "خروج",
"Undo" => "برگشت",
"Redo" => "ازنو",
"Indent more" => "کم کردن فاصله",
"Indent less" => "زیاد کردن فاصله",
"Autocomplete" => "تکمیل خودکار",
"Comment/Uncomment" => "نظر/ضد نظر",
"Jump to Definition" => "انتقال به تعریف",
"Manual" => "دستی",
"Shortcuts" => "کلید های میانبر",
"Settings" => "تنظیمات",
"Search for selected" => "جستجو برای انتخاب شده ها",
"website" => "وب سایت",
"Close all tabs" => "بستن همه پنجره ها",
"Alphabetize tabs" => "مرتب سازی پنجره ها بر اساس حروف الفبا",
// "Find" => "یافتن",
// "in" => "در",
// "and" => "و",
// "replace" => "جایگزین کردن",
// "replace all" => "جایگزین کردن همه",
// "this document" => "این سند",
// "open documents" => "سند های باز",
// "all files" => "همه فایل ها",
// "all filenames" => "همه نام فایل ها",
"Turn on/off..." => "روشن / خاموش کردن کد کمد",
"Code Assist" => "کد کمک",
"Go to Line" => "برو به خط",
"View" => "نمایش",
"Bug reporting not active" => "گزارش اشکال فعال نیست"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "یافتن در :"
),
"file-control" =>
array(
"Sorry" => "متاسفیم",
"does not seem..." => "به نظر می رسد بر روی سرور موجود نیست",
"Sorry, could not..." => "متاسفانه نمی توانیم اطلاعات را دریافت کنیم",
"Sorry, cannot create..." => "متاسفانه نمی توانیم یک شاخه در مسیر زیر ایجاد کنیم",
"Sorry, cannot copy" => "متاسفانه نمی توانیم کپی کنیم",
"into" => "into",
"Uploaded file(s) OK" => "بارگذاری فایل ها موفقیت آمیز بود",
"Sorry, cannot upload" => "متاسفانه نمیتوانیم آپلود کنیم",
"Sorry, cannot upload..." => "متاسفانه امکان آپلود در نسخه دمو وجود ندارد",
"Sorry, cannot rename" => "متاسفانه نمی توانیم تغییر نام دهیم",
"Maybe public write..." => "به نظر می رسد دسترسی نوشتن برای شاخه والد لازم است",
"Sorry, cannot move" => "متاسفانه نمی توانیم انتقال دهیم",
"Sorry, cannot save" => "متاسفانه نمی توانیم ذخیره کنیم",
"Sorry, cannot replace..." => "متاسفانه نمی نمی توانیم جایگزین کنیم",
"Sorry, cannot change..." => "متاسفانه نمی توانیم دسترسی را تغییر دهیم",
"Sorry, cannot delete..." => "متاسفانه نمی توانیم دسترسی ریشه را تغییر دهیم",
"Sorry, cannot delete" => "متاسفانه نمی توانیم تغییر دهیم",
"Sorry, this file..." => "متاسفانه این فایل تغییر دارد و نمی توانیم آن را ذخیره کنیم",
"Reload this file..." => "بارگذاری مجدد این فایل و جایگزینی تغییرات شما در یک فایل جدید؟",
"There was a..." => "یک وقفه تکنولوژیک وجوددارد،احتمالا چیزی کامل آماده نیست. بنابراین ICEcoder مجددا این فایل را بارگذاری می کند..",
"displayed at" => "نمایش داده شده در",
"Enter filename to..." => "نام فایل را برای ذخیره وارد کنید",
"That file exists..." => "این فایل هم اکنون موجود است ، جایگزین شود؟",
"Saving" => "در حال ذخره"
),
"get-branch" =>
array(
"There are no..." => "تغییراتی بین مخزن محلی و مخزن گیت وجود دارد ، به حالت معمول برگردد؟",
"Sorry, there was..." => "متاسفانه خطای روی داده است . کد خطا : ",
"Your local folder..." => "شاخه محلی شما خالی است ، آیا میخواهید تکثیر کنید ؟"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "متاسفانه نمیتوانیم یک شاخه بسازیم در :",
"Cannot update config..." => "متاسفانه نمیتوان فایل تنظیمات را به روز کرد. لطفا دسترسی نوشتن را اضافه کنید به",
"and try again" => "و مجددا تلاش نمایید",
"saving github paths" => "ذخیره مسیر های گیت هاب ...",
"github paths" => "مسیر های گیت هاب",
"Choose existing path" => "انتخاب یک مسیر موجود",
"Local path" => "مسیر محلی",
"Remote GitHub path" => "مسیر ریموت گیت هاب",
"Choose" => "انتخاب",
"Set local and..." => "برای حذف مسیر محلی و ریموت ، آنها را به صورت خالی تنظیم کرده و ذخیره کنید",
"Update" => "به روز رسانی",
"Add new path" => "اضافه کردن مسیر جدید",
"Add" => "اضافه کردن",
"Usage Info" => "اطلاعات مورد استفاده :",
"Enter relative local..." => "Enter relative local paths (eg /server/myfiles) and absolute GitHub paths (eg https://github.com/user/repo or https://github.com/user/repo/tree/branch for branches), as per the examples. With this done you have established the source paths at both locations, as a pair.",
"You can then..." => "شما میتوانید یک جفت مسیر انتخاب کنید و مسیر جدید ریشه خود را در ICEcoder وارد کنید.",
"The file manager..." => "The file manager then displays a new GitHub icon, which you can click on to perform and show a diff check between the 2 sources. These diffs can then be committed and pushed to the remote path at GitHub or cloned to your local path, to sync your files.",
"If you want..." => "اگر میخواهید یک مسیر ریشه دیگر تنظیم کنید ، به صفحه تنظیمات بروید."
),
"github" =>
array(
"Sorry, you do..." => "متاسفانه امکان استفاده از OpenSSL در تنظیمات پی اچ پی شما وجود ندارد, بنابر این https در دسترس نیست. این گزینه برای انتقال فایل با گیت هاب لازم است, لطفا تنظیمات php.ini خود را به روز کنید, سرور خود را مجددا راه اندازی کنید و سپس امتحان کنید"
),
"headers" =>
array(
"Bad CSRF token..." => "توکن CSRF اشتباه. لطفا خطا را در https://github.com/mattpass/ICEcoder گزارش دهید تا اصلاح شود."
),
"help" =>
array(
"shortcuts" => "میان بر ها",
"Within document" => "داخل سند",
"On Tabs" => "در تب های",
"Within file manager" => "در مدیریت فایل",
"Anywhere" => "همه جا",
"Space" => "اسپیس",
"Click" => "کلیک",
"or" => "یا",
"Left click" => "کلیک چپ",
"Middle click" => "کلیک وسط",
"Double click tap..." => "دبل کلیک / تب ( موبایل )",
"Right click" => "کلیک راست",
"Middle scrollwheel" => "اسکرولر وسط",
"Drag" => "دراگ",
"Autocomplete add snippet" => "تکمیل خودکار / اضافه کردن قطعه",
"Multiple select" => "چند انتخاب",
"Move line up" => "انتقال خط بالا",
"Move line down" => "انتقال خط پایین",
"Duplicate lines" => "تکثیر خط",
"Remove lines" => "حذف خط",
"Insert line before" => "اضافه کردن خط قبل از",
"Insert line after" => "اضافه کردن خط بعد از",
"Search for selected" => "جستجو برای انتخاب شده",
"Jump to definition" => "برو به تعریف / برو عقب",
"Comment uncomment" => "کامتی / حذف کامیت",
"Insert tab indent" => "وارد کردن تب / انتخاب شده داخل است",
"Wrap with div" => "قرار دادن با &lt;div&gt;",
"Wrap with span" => "قرار دادن با &lt;span&gt;",
"Wrap unwrap p" => "قرار دادن / باز کردن با &lt;p&gt;",
"Wrap unwrap a" => "قرار دادن / باز کردن با &lt;a&gt;",
"Wrap unwrap b" => "قرار دادن / باز کردن با &lt;b&gt;",
"Wrap unwrap i" => "قرار دادن / باز کردن با &lt;i&gt;",
"Wrap unwrap strong" => "قرار دادن / باز کردن با &lt;strong&gt;",
"Wrap unwrap em" => "قرار دادن / باز کردن با &lt;em&gt;",
"Wrap unwrap li" => "قرار دادن / باز کردن با &lt;li&gt;",
"Wrap unwrap h1..." => "قرار دادن / باز کردن با &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "انتخاب خط با &lt;br&gt;",
"Close tab" => "بستن تب",
"Select file folder" => "انتخاب فایل / پوشه",
"Open file" => "باز کردن فایل",
"Range select" => "انتخاب رنج",
"Options for selected" => "گزینه های برای انتخاب",
"Delete selected" => "حذف انتخاب ها",
"Next previous tab" => "تب قبلی / بعدی",
"Next tab" => "تب بعدی",
"Previous tab" => "تب قبلی",
"New tab" => "تب جدید",
"Close current tab" => "بستن تب فعلی",
"Open file prompt" => "باز کردن سریع فایل",
"Find" => "یافتن",
"Focus on Go..." => "فکوس کن برای رفتن به خط ورود",
"Save" => "ذخیره",
"Save as" => "ذخیره به عنوان ...",
"View webpage" => "مشاهده صفحه وب",
"Contract expand file..." => "قرارداد / گسترش مدیریت فایل",
"Fold unfold current..." => "ریختن (فولد) / آشکار شدن فایل فعلی",
"Refocus on document" => "فوکوس مجدد در سند",
"Cancel tasks" => "لغو تسک"
),
"ice-coder" =>
array(
"No text selected..." => "هیچ متنی برای جستجو انتخاب نشده است",
"Creating Folder" => "در حال ساخت پوشه",
"Sorry you can..." => "متاسفانه ، شما می توانید حداکثر ۱۰۰ فایل را هم زمان باز کنید !",
"Opening File" => "در حال باز کردن فایل",
"Enter relative file..." => "قراردادن مسیر فایل مشابه ( ابتدا با / ) یا لینک ریموت",
"Getting" => "دریافت",
"Please enter the..." => "لطفا یک نام جدید وارد کنید برای",
"Renaming to" => "تغییر نام به",
"Moving to" => "انتقال به",
"Deleting File" => "در حال حذف فایل ها",
"Pasting File" => "در حال پست کردن فایل",
"Sorry cannot paste..." => "متاسفانه نمی توان به ریشه چیزی اضافه کرد",
"Nothing to paste..." => "هیچ چیش برای چسباندن نیست ! ابتدا فایل / پوشه را کپی کنید",
"Replacing text in" => "جایگزین کردن متن در",
"Cancelled tasks" => "تسک های لغو شده ",
"Open previous files" => "بازکردن فایل های قبلی؟",
"Please enter your..." => "Please enter your GitHub token (either personal access token or client/secret pair token). See tooltip next to Github Auth Token on Help > Settings screen for more info",
"This will compare..." => "این گزینه تفاوت بین فایل محلی شما و تغییرات سرور را نمایش می دهد. مورد تایید است؟",
"Please note for..." => "Please note: for updating to work properly, you need to have write/delete access on all ICEcoder dirs & files. If you need to recover this version of ICEcoder for any reason, you'll find it in the /tmp dir. Click OK to proceed with an auto-update or cancel to visit the ICEcoder site so you can grab the zip and update manually.",
"You can start..." => "شما می توانید ارسال خطا را از منوی کمک رسانی > تنظیمات انجام دهید",
"Error cannot find..." => "خطا : نمی توانید به فایل / مسیر فایل های خطا دسترسی پیدا کنید.",
"No new errors..." => "هیچ خطای جدیدی پیدا نشد",
"You have made..." => "شما تغییراتی اعمال کرده اید. آیا اطمینان دارید که میخواهید بدون ذخیره کردن فایل را ببندید؟",
"Close all tabs" => "بستن همه تب ها؟"
),
"login" =>
array(
"set password" => "تنظیم واژه رمز",
"login" => "ورود",
"To disable registration..." => "برای غیر فعال کردن حالت ثبت نام ، منوی تنظیمات را باز کنید و یا فایل lib/config___settings.php را باز کنید و گزینه enableRegistration را به false تغییر دهید. سپس این صفحه را بارگذاری مجدد نمایید",
"Registration mode enabled" => "حالت ثبت نام فعال است",
"auto-check for updates" => "بررسی خودکار برای به روز رسانی",
"To put into..." => "برای وارد شدن به حالت چند کاربره ، منوی تنظیمات را باز کنید و یا فایل lib/config___settings.php و گزینه multiUser را به true تغییر دهید و و ذخیره کنید. سپس این صفحه را بارگذاری مجدد نمایید",
"multi-user" => "چند کاربره"
),
"multiple-results" =>
array(
"rename all" => "تغییر نام همه",
"replace all" => "جایگزین کردن همه",
"document" => "سند",
"Found" => "یافتن",
"times" => "دفعات",
"replace" => "جایگزین کردن",
"file folder" => "فایل/فولدر",
"rename to" => "تغییر نام به",
"rename" => "تغیر نام",
"file" => "فایل",
"No matches found" => "جستجو نتیجه ای نداشت",
"selected" => "انتخاب شده",
"found in" => "یافتن در",
"Replaced" => "جایگزین شود"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder نیاز به بارگذاری مجدد برای فعال شدن این افزونه دارد. بارگذاری مجدد انجام شود؟",
"saving plugins" => "ذخیره سازی افزونه ...",
"Cannot update config..." => "نمی توان فایل تنظیمات را به روز کرد ، دسترسی نوشتن را فعال کنید برای",
"and try again" => "و مجدد امتحان کنید",
"couldnt delete dir" => "ناتوان در حذف پوشه",
"couldnt delete file" => "ناتوان در حذف فایل",
"plugins" => "افزونه ها",
"Guide to writing..." => "راهنمای نوشتن افزونه",
"Manage Installed" => "مدیریت نصب",
"URL" => "آدرس",
"Target" => "هدف",
"Timer" => "زمان سنج",
"Update" => "آپدیت",
"Install" => "اینستال",
"Uninstall" => "آن انیستال",
"Reload after install..." => "بارگذاری مجدد بعد از نصب لازم است"
),
"properties" =>
array(
"properties" => "ویژگی ها",
"Size" => "اندازه",
"Modified" => "ویرایش شده",
"Last access" => "آخرین دسترسی",
"Type" => "نوع",
"Readable Writeable" => "قابل خواندن / قابل نوشتن",
"Relative path" => "مسیر نسبی",
"Absolute path" => "مسیر مطلق",
"Contains" => "شامل",
"Permissions" => "دسترسی ها",
"Owner" => "سازنده",
"Group" => "گروه",
"Public" => "عمومی",
"Read" => "خواندن",
"Write" => "نوشتن",
"Execute" => "اجرا",
"Change to" => "تغییر به",
"update" => "به روز کردن"
),
"settings-common" =>
array(
"Your document does..." => "سند شما با استاندارد UTF-8 همخوانی ندارد ، تبدیل می شود"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "نمیتوان فایل تنظیمات را به روز کرد ، لطفا دسترسی نوشتن را بررسی کنید در",
"and try again" => "و مجددا تلاش نمایید"
),
"settings-screen" =>
array(
"settings" => "تنظیمات",
"version" => "نسخه",
"website" => "وب سایت",
"git" => "گیت",
"codemirror dir" => "مسیر کد آینه",
"codemirror version" => "نسخه کد آینه",
"file manager root" => "ریشه مسیر مدیریت فایل",
"Free to use..." => "Free to use it for your own purposes, commercial or not, just let me know of any cool uses or customisations. :)<br><br>No warranty or liability accepted for anything, all responsibility of use is your own.<br><br>A lot of fantastic people and companies have helped build ICEcoder and there is too many to thank here. Please see the full list at",
"functionality" => "تابع بندی",
"check for updates..." => "بررسی برای به روز رسانی در هنگام بارگذاری",
"auto open last..." => "باز کردن خودکار آخرین فایل ها در هنگامک بارگذاری",
"when finding in..." => "وقتی در فایل یافت شد ، رد شود",
"assisting" => "کمک رسانی",
"code assist" => "کد کمک",
"visible tabs" => "تب های قابل نمایش",
"locked nav" => "قفل کردن منو",
"tag wrapper command" => "برچسب دستور والد",
"auto-complete on" => "تکمیل خودکار روشن",
"security" => "امنیت",
"new password" => "پسورد جدید",
"8 chars min" => "حداقل ۸ کارکتر",
"confirm password" => "تایید پسورد",
"banned files/folders" => "فایل ها / پوشه های مسدود شده",
"banned paths" => "مسیر های مسدود شده",
"ip addresses" => "آدرس آی پی",
"Slash prefixed comma..." => "پیشوند اسلش, با کاما از هم جدا کنید",
"Comma delimited" => "با کما جدا شوند",
"style" => "استایل",
"theme" => "قالب",
"line wrapping" => "وارپینگ خط",
"indent type" => "نوع برجسته کردن",
"indent size" => "اندازه برجسته کردن",
"font size" => "اندازه فونت",
"auto indent" => "auto indent",
"layout" => "لایه",
"plugin panel aligned" => "تراز پنل پلاگین",
"file manager" => "مدیریت فایل",
"root" => "ریشه",
"Slash prefixed" => "پیشوند اسلش",
"bug reporting" => "گزارش باگ",
"check in files" => "فایل های چک این",
"every" => "همه",
"secs getting last" => "دریافت فهرست",
"lines" => "خط",
"multi-user" => "چند کاربره",
"Make sure you..." => "مطمئن شوید خود را خاریج از اینجا قفل نکرده اید",
"Registration" => "ثبت نام",
"auth token" => "توکن خودکار",
"Required to get..." => "Required to get diffs, commit to your GitHub hosted repo etc. If you do not have one, you can use a:".PHP_EOL.PHP_EOL.
"- personal access token (https://help.github.com/articles/creating-an-access-token-for-command-line-use), or".PHP_EOL.
"- full client/secret pair token (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"It is not recommended you set your token here however and is more secure to enter it when requested by ICEcoder as that will keep it in session only.".PHP_EOL.PHP_EOL.
"However, if you work in a trusted and secure environment, it is more efficient to set it here.",
"Sorry cannot commit..." => "متاسفانه نمی توان در حالت نمایشی تنظیمات را تغییر داد",
"update" => "به روز کردن"
),
"settings-update" =>
array(
"Cannot update config..." => "نمی توان فایل تنظیمات را به روز کرد ، لطفا دسترسی نوشتن را اعمال کنید در",
"and try again" => "و مجدد تلاش کنید",
"and press refresh" => "و صفحه را مجدد بارگذاری کنید"
),
"updater" =>
array(
"Update appears to..." => "با موفقیت به روز شد"
)
);
?>

View File

@@ -0,0 +1,439 @@
<?php
// Português do Brasil
// by: @leonardoroese (GitHub)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>Ícones<br>para ajuda &amp;<br>info. utilização</b>",
"server" => "Servidor",
"Server name, OS..." => "Nome do Servidor, OS & IP:",
"Root" => "Raiz:",
"ICEcoder root" => "ICEcoder raiz:",
"PHP version" => "Versâo do PHP:",
"Date & time" => "Data e Hora:",
"your device" => "seu dispositivo",
"Browser" => "Exibir:",
"Your IP" => "Seu IP:",
"files" => "arquivos",
"Last 10 files..." => "ùltimos 10 arquivos abertos:",
"none" => "[nenhum]",
"test suite" => "suíte de teste",
"Run unit tests" => "Executar testes unitários",
"dev mode" => "modo desenv.",
"Status" => "Status",
"Using" => "Usando",
"You can switch..." => "Você pode alterar modo desenv. on/off em lib/config__settings.php"
),
"files" =>
array(
"Lock" => "Trava",
"Refresh" => "Atualizar",
"ROOT" => "[RAIZ]"
),
"index" =>
array(
"UPDATE INFO" => "INFO ATUALIZAÇÃO",
"now available" => "disponível agora",
"Your version is" => "Sua versão é",
"Update now" => "Atualizar já",
"You have some..." => "Voce possui alterações não salvas",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "trabalhando",
"Color picker" => "Color picker",
"New File" => "Novo Arquivo",
"New Folder" => "Nova Pasta",
"Upload File(s)" => "Carregar arquivo(s)",
"Paste" => "Colar",
"Open" => "Abrir",
"Copy" => "Copiar",
"Duplicate" => "Duplicar",
"Delete" => "Excluir",
"Rename" => "Renomear",
"View Webpage" => "Exibir Página Web",
"Download" => "Download",
"Properties" => "Propriedades",
"File" => "Arquivo",
"Remote" => "Remoto",
"Edit" => "Editar",
"Source" => "Fonte",
"Help" => "Ajuda",
"Save" => "Salvar",
"Save As" => "Salvar Como",
"Live Preview" => "Preview",
"Upload" => "Upload",
"Zip" => "Zip",
"Print" => "Imprimir",
"Fullscreen toggle" => "Exibir tela cheia",
"Logout" => "Sair",
"Undo" => "Desfazer",
"Redo" => "Refazer",
"Indent more" => "Indentar +",
"Indent less" => "Indentar -",
"Autocomplete" => "Autocompletar",
"Comment/Uncomment" => "Comentar/Descomentar",
"Jump to Definition" => "Ir para definição",
"Manual" => "Manual",
"Shortcuts" => "Atalhos",
"Settings" => "Configurações",
"Search for selected" => "Procurar por selecionado",
"website" => "website",
"Close all tabs" => "Fechar todas as abas",
"Alphabetize tabs" => "Ordenar abas por nome",
"Find" => "Procurar",
"in" => "em",
"and" => "e",
"replace" => "substituir",
"replace all" => "substituir tudo",
"this document" => "este documento",
"open documents" => "documentos abertos",
"all files" => "todos os arquivos",
"all filenames" => "todos nomes de arquivo",
"Turn on/off..." => "Ligar/Desligar Assistente",
"Code Assist" => "Assistente",
"Go to Line" => "Ir para linha",
"View" => "Exibir",
"Bug reporting not active" => "Relatório de Bug desativado"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Encontrado em:"
),
"file-control" =>
array(
"Sorry" => "Desculpe",
"does not seem..." => "Não encontrado no servidor",
"Sorry, could not..." => "Desculpe, conteudo não encontrado para",
"Sorry, cannot create..." => "Desculpe, não é possível criar pasta",
"Sorry, cannot copy" => "Desculpe, não é possível copy",
"into" => "into",
"Uploaded file(s) OK" => "Arquivos carregados",
"Sorry, cannot upload" => "Desculpe, não é possível carregar",
"Sorry, cannot upload..." => "Desculpe, não é possível carregar lista no modo DEMO",
"Sorry, cannot rename" => "Desculpe, não é possível renomear",
"Maybe public write..." => "A pasta superior possui permissão de escrita?",
"Sorry, cannot move" => "Desculpe, não é possível mover",
"Sorry, cannot save" => "Desculpe, não é possível salvar",
"Sorry, cannot replace..." => "Desculpe, não é possível substituir texto em",
"Sorry, cannot change..." => "Desculpe, não é possível mudar permissões para",
"Sorry, cannot delete..." => "Desculpe, não é possível excluir nível raiz",
"Sorry, cannot delete" => "Desculpe, não é possível remover",
"Sorry, this file..." => "Desculpe, este arquivo foi modificado, não é possível salvar",
"Reload this file..." => "Recarregar e copiar sua versão?",
"There was a..." => "Ocorreu algum problema. O ICEcoder recarregou o arquivo de controle novamente",
"displayed at" => "exibido em",
"Enter filename to..." => "Informe o nome do aquivo para salvar",
"That file exists..." => "Este arquivo já existe, sobrescrever?",
"Saving" => "Salvando"
),
"get-branch" =>
array(
"There are no..." => "Não há diferenças entre loca/Github. Retornar para modo normal?",
"Sorry, there was..." => "Desculpe, ocorreu um erro, código:",
"Your local folder..." => "Sua pasta local está vazia, gostaria de clonar"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "Desculpe, não foi possível criar em",
"Cannot update config..." => "Não é possível atualizar config. Habilitar permissões públicas",
"and try again" => "e tentar novamente",
"saving github paths" => "salvando caminhos Github...",
"github paths" => "caminhos Github",
"Choose existing path" => "Escolha caminho existente",
"Local path" => "Caminho local",
"Remote GitHub path" => "Caminho remoto Github",
"Choose" => "Selecione",
"Set local and..." => "Alterar caminho local e remoto como vazio para excluír",
"Update" => "Atualizar",
"Add new path" => "Adicionar novo caminho",
"Add" => "Adicionar",
"Usage Info" => "Info. de utilização:",
"Enter relative local..." => "Informe os caminhos relativos (ex.: /server/myfiles) e absolutos do GitHub (ex.: https://github.com/user/repo ou https://github.com/user/repo/tree/branch for branches).Com isso estabelece os caminho dos fontes em ambos locais, como pares.",
"You can then..." => "Você pode então escolher um caminho par para ser a raiz do ICEcoder.",
"The file manager..." => "O gerenciador de arquivo exibirá o ícone GitHub, você pode clicar para verificar a diferença entre arquivos.Essas diferenças podem ser efetivadas e enviadas ao diretório remoto do GitHub ou clonado para pasta local, para sincronizar seus arquivos.",
"If you want..." => "Se quiser configurar novo caminho raiz, pode ser feito na tela de configurações."
),
"github" =>
array(
"Sorry, you do..." => "Desculpe, o OpenSSL não foi encontrado, https indisponível. Isso é necessário para o GitHub transferir dados, verificar php.ini, reinicie o sistema e tente novamente"
),
"headers" =>
array(
"Bad CSRF token..." => "Erro na chave CSRF. Reportar em https://github.com/mattpass/ICEcoder para ser corrigido."
),
"help" =>
array(
"shortcuts" => "atalhos",
"Within document" => "Neste documento",
"On Tabs" => "Em abas",
"Within file manager" => "No gerenciador de arquivos",
"Anywhere" => "Qualquer Lugar",
"Space" => "Espaço",
"Click" => "Clique",
"or" => "ou",
"Left click" => "Clique esquerdo",
"Middle click" => "Clique Meio",
"Double click tap..." => "Clique duplo / toque (mobile)",
"Right click" => "Clique direito",
"Middle scrollwheel" => "Meio scroll",
"Drag" => "Arrastar",
"Autocomplete add snippet" => "Auto-completar / adicionar snippet",
"Multiple select" => "Multipla seleção",
"Move line up" => "Move linha acima",
"Move line down" => "Move linha abaixo",
"Duplicate lines" => "Duplicar linha(s)",
"Remove lines" => "Remover linha(s)",
"Insert line before" => "Inserir linha antes",
"Insert line after" => "Inserir linha após",
"Search for selected" => "Procurar selecionado",
"Jump to definition" => "Ir para definição / voltar",
"Comment uncomment" => "Commentar / descomentar",
"Insert tab indent" => "Inserir aba / auto indent selected",
"Insert more" => "Indentar +",
"Insert less" => "Indentar -",
"Wrap with div" => "Quabra com &lt;div&gt;",
"Wrap with span" => "Quabra com &lt;span&gt;",
"Wrap unwrap p" => "Quabra / desfaz com &lt;p&gt;",
"Wrap unwrap a" => "Quabra / desfaz com &lt;a&gt;",
"Wrap unwrap b" => "Quabra / desfaz com &lt;b&gt;",
"Wrap unwrap i" => "Quabra / desfaz com &lt;i&gt;",
"Wrap unwrap strong" => "Quabra / desfaz com &lt;strong&gt;",
"Wrap unwrap em" => "Quabra / desfaz com &lt;em&gt;",
"Wrap unwrap li" => "Quabra / desfaz com &lt;li&gt;",
"Wrap unwrap h1..." => "Quabra / desfaz com &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "Fim de linha com &lt;br&gt;",
"Close tab" => "Fechar aba",
"Select file folder" => "Selecionar arquivo / pasta",
"Open file" => "Abrir arquivo",
"Range select" => "Seleção",
"Options for selected" => "Opções para seleção",
"Delete selected" => "Excluir selecionado",
"Next previous tab" => "Próxima aba / anterior",
"Next tab" => "Próxima aba",
"Previous tab" => "Aba anterior",
"New tab" => "Nova aba",
"Close current tab" => "Fechar aba atual",
"Open file prompt" => "Abrir prompt de comando",
"Find" => "Buscar",
"Focus on Go..." => "Foco campo ir para linha",
"Save" => "Salvar",
"Save as" => "Salvar como...",
"View webpage" => "Exibir página",
"Contract expand file..." => "Contrair / expandir gerenciador de arquivos",
"Fold unfold current..." => "Contrair / expandir linha atual",
"Refocus on document" => "Foco no documento",
"Cancel tasks" => "Cancelar tarefas"
),
"ice-coder" =>
array(
"No text selected..." => "Sem texto selecionado para buscar",
"all files" => "todos arquivos",
"all filenames" => "todos nomes de arquivos",
"selected files" => "arquivos selecionados",
"selected filenames" => "nomes de arquivos selecionados",
"Creating Folder" => "Criando pasta",
"Sorry you can..." => "Deculpe, permitido abrir máx. 100 arquivos!",
"Opening File" => "Abrindo arquivo",
"Enter relative file..." => "Informe caminho relativo (prefixado por /) ou URL remota",
"Getting" => "Selecionando",
"Please enter the..." => "Informe novo nome para",
"Renaming to" => "Renomeando para",
"Moving to" => "Movendo para",
"Deleting File" => "Excluindo arquivo",
"Pasting File" => "Colando arquivo",
"Sorry cannot paste..." => "Desculpe, não é possível colar em toda raiz",
"Nothing to paste..." => "Nada para colar,copiar arquivo/pasta primeiro!",
"and" => "e",
"this document" => "este documento",
"replace" => "substituir",
"replace all" => "substituir tudo",
"file" => "arquivo",
"Replacing text in" => "Substituindo texto em",
"Cancelled tasks" => "Tarefas canceladas",
"Open previous files" => "Abrir arquivos anteriores?",
"Please enter your..." => "Informe sua chave GitHub (chave pessoal ou par). Veja dica próximo à chave Github em Ajuda > Configurações para mais informações",
"This will compare..." => "Esta ação irá comparar e exibir diferenças do seu repositório local. OK?",
"Please note for..." => "Atenção: para atualizar corretamente, é necessário permissâo de escrita em todos os diretórios/arquivos do ICEcoder. \\n\\nSe por algum motivo necessite recuperar esta versão do ICEcoder, estará disponível na pasta /tmp.\\n\\nClique OK para prosseguir com a atualização, ou cancelar para visitar a página do ICEcoder na internet onde poderá baixar a atualização manualmente.",
"You can start..." => "Voce pode reportar um bug em Ajuda > Configurações",
"Error cannot find..." => "Erro: não é possível acessar caminho/arquivo de erros",
"No new errors..." => "Nenhum erro encontrado",
"You have made..." => "Voce fez alterações. Deseja realmente fechar sem salvar?",
"Close all tabs" => "Fechar todas as abas?",
"results" => "resultados"
),
"login" =>
array(
"set password" => "altera senha",
"login" => "login",
"To disable registration..." => "Para desabilitar modo registro, acesse menu/configurações ou em lib/config___settings.php altere enableRegistration para false e recarregue esta página",
"Registration mode enabled" => "Modo registro habilitado",
"auto-check for updates" => "verificar atualizações auto.",
"To put into..." => "Para habilitar multi-usuários, acesse menu/configurações ou em lib/config___settings.php altere multiUser para true e recarregue esta página",
"multi-user" => "multi-usuários"
),
"multiple-results" =>
array(
"rename all" => "renomear tudo",
"replace all" => "substituir tudo",
"document" => "documento",
"Found" => "Encontrado",
"times" => "vezes",
"replace" => "substituir",
"file folder" => "arquivo/pasta",
"rename to" => "renomear para",
"rename" => "renomear",
"file" => "arquivo",
"No matches found" => "Nenhum resultado encontrado",
"selected" => "selecionado",
"found in" => "encontrado em",
"Replaced" => "Substituído(s)"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder deve ser reiniciado para habilitar plugin. Deseja Reiniciar?",
"saving plugins" => "salvando plugins...",
"Cannot update config..." => "Não foi possível atualizar arquivo de configuração. Verifique permissões de escrita.",
"and try again" => "e tente novamente",
"couldnt delete dir" => "não foi possível excluir pasta",
"couldnt delete file" => "não foi possível excluir arquivo",
"plugins" => "plugins",
"Guide to writing..." => "Guia para criar plugins",
"Manage Installed" => "Gerenciar plugins",
"URL" => "URL",
"Target" => "Alvo",
"Timer" => "Temporizador",
"Update" => "Atualizar",
"Install" => "Instalar",
"Uninstall" => "Desinstalar",
"Reload after install..." => "Atualização necessária após instalação"
),
"properties" =>
array(
"properties" => "propriedades",
"Size" => "Tamanho",
"Modified" => "Modificado",
"Last access" => "Último acesso",
"Type" => "Tipo",
"Readable Writeable" => "Leitura / Escrita",
"Relative path" => "Caminho relativo",
"Absolute path" => "Caminho absoluto",
"Contains" => "Contem",
"Permissions" => "Permissões",
"Owner" => "Proprietário",
"Group" => "Grupo",
"Public" => "Público",
"Read" => "Ler",
"Write" => "Salvar",
"Execute" => "Executar",
"Change to" => "Alterar para",
"update" => "atualizar"
),
"settings-common" =>
array(
"Your document does..." => "Seu arquivo não está no formato UTF-8, deve ser convertido"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "Não foi possível atualizar arquivo de configuração. Verifique permissões de acesso (públicas)",
"and try again" => "e tente novamente"
),
"settings-screen" =>
array(
"settings" => "configurações",
"version" => "versão",
"website" => "website",
"git" => "git",
"codemirror dir" => "pasta codemirror",
"codemirror version" => "versão codemirror",
"file manager root" => "Raiz gerenciador de arquivos",
"Free to use..." => "Livre para utilização para seus propósitos, comercial ou não, mas aviseme sobre sua implementação se puder. :)<br><br>Sem garantias, Muitas empresas e pessoas fantásticas contribuiram para desenvolver o ICEcoder, há muito o que agradecermos aqui. Veja a lista completa aqui",
"functionality" => "funcionalidade",
"check for updates..." => "verificar atualizações ao iniciar",
"auto open last..." => "carregar últimos arquvos abertos ao iniciar",
"when finding in..." => "ao buscar arquivos, excluir",
"assisting" => "assistindo",
"code assist" => "Assist. de cód.",
"visible tabs" => "Abas visíveis",
"locked nav" => "Trava Nav.",
"tag wrapper command" => "comando de quebra",
"auto-complete on" => "hab. auto-completar",
"security" => "segurança",
"new password" => "nova senha",
"8 chars min" => "mín. 8 carac.",
"confirm password" => "confirmar senha",
"banned files/folders" => "arquivos/pastas bloqueados",
"banned paths" => "caminhos bloqueados",
"ip addresses" => "endereços IP",
"Slash prefixed comma..." => "Prefixo barra, separado por vígula",
"Comma delimited" => "Separado por vírgula",
"style" => "estilo",
"theme" => "tema",
"line wrapping" => "quebra de linha",
"indent type" => "indent type",
"indent size" => "indent size",
"font size" => "tam. fonte",
"auto indent" => "auto indent",
"layout" => "layout",
"plugin panel aligned" => "painel plugin alinhado",
"file manager" => "gerenciador de arquivos",
"root" => "raiz",
"Slash prefixed" => "Prefixo barra",
"bug reporting" => "reportar erro",
"check in files" => "verificar em arquivos",
"every" => "tudo",
"secs getting last" => "segs, pegando últimos",
"lines" => "linhas",
"multi-user" => "multi-usuário",
"Make sure you..." => "Cuidado para nâo travar seu usuário",
"Registration" => "Cadastro",
"auth token" => "Chave de Autenticação",
"Required to get..." => "RNecessário para verificar diferenças, e efetivar alterações no GitHub. Se não tiver uma pode usar:".PHP_EOL.PHP_EOL.
"- chave de acesso pessoal (https://help.github.com/articles/creating-an-access-token-for-command-line-use), or".PHP_EOL.
"- cliente/par secreto (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"Não é recomendado configurar sua chave aqui, mas quando solicitado pelo ICEcoderpara mantes em sessão apenas.".PHP_EOL.PHP_EOL.
"No entanto, se trabalhar em ambiente seguro, é melhor setar essa propriedade.",
"Sorry cannot commit..." => "Desculpe, não é permitido efetivar atulização no modo DEMO",
"update" => "atualizar"
),
"settings-update" =>
array(
"Cannot update config..." => "Não foi possível atualizar arquivo de configuração. Verifique permissões de acesso (públicas)",
"and try again" => "e tentar novamente",
"and press refresh" => "e pressione atulizar"
),
"updater" =>
array(
"Update appears to..." => "Atualização completada"
)
);
?>

436
lang/spanish.php Normal file
View File

@@ -0,0 +1,436 @@
<?php
// Spanish language translation
// by: @unix4you2 (GitHub)
// Please preserve formatting, line breaks, special characters, anything in <tags> and HTML equivalents (eg &amp;). Translations on right side.
$text = array(
// / [ROOT LEVEL]
"editor" =>
array(
"Click icons for..." => "<b>Clic en los iconos<br>para ayuda &amp;<br>modo de uso</b>",
"server" => "servidor",
"Server name, OS..." => "Nombre del servidor, OS & IP:",
"Root" => "Raiz:",
"ICEcoder root" => "Raiz de ICEcoder:",
"PHP version" => "Versi&oacute;n PHP:",
"Date & time" => "Fecha y hora:",
"your device" => "su dispositivo",
"Browser" => "Navegador:",
"Your IP" => "Su IP:",
"files" => "archivos",
"Last 10 files..." => "Ultimos 10 archivos abiertos:",
"none" => "[ninguno]",
"test suite" => "modo de pruebas",
"Run unit tests" => "Ejecutar tests unitarios",
"dev mode" => "modo desarrollo",
"Status" => "Estado",
"Using" => "Usando",
"You can switch..." => "Usted puede cambiar el modo de desarrollo cambiando su valor on/off en lib/config__settings.php"
),
"files" =>
array(
"Lock" => "Bloquear",
"Refresh" => "Actualizar",
"ROOT" => "[RAIZ]"
),
"index" =>
array(
"UPDATE INFO" => "INFORMACION DE ACTUALIZACION",
"now available" => "ahora disponible",
"Your version is" => "Su versi&oacute;n es",
"Update now" => "Actualizar ahora",
"You have some..." => "Usted tiene cambios sin guardar",
"Are you sure you want to close?" => "Are you sure you want to close?",
"working" => "trabajando",
"Color picker" => "Selector de color",
"New File" => "Nuevo archivo",
"New Folder" => "Nueva carpeta",
"Upload File(s)" => "Cargar archivo(s)",
"Paste" => "Pegar",
"Open" => "Abrir",
"Copy" => "Copiar",
"Duplicate" => "Duplicar",
"Delete" => "Eliminar",
"Rename" => "Renombrar",
"View Webpage" => "Ver p&aacute;gina web",
"Download" => "Descargar",
"Properties" => "Propiedades",
"File" => "Archivo",
"Edit" => "Editar",
"Source" => "Fuente",
"Help" => "Ayuda",
"Save" => "Guardar",
"Save As" => "Guardar como",
"Live Preview" => "Vista previa",
"Upload" => "Cargar",
"Zip" => "Comprimir",
"Print" => "Imprimir",
"Fullscreen toggle" => "Cambiar a pantalla completa",
"Logout" => "Salir",
"Undo" => "Deshacer",
"Redo" => "Rehacer",
"Indent more" => "Aumentar sangr&iacute;a",
"Indent less" => "Disminuir sangr&iacute;a",
"Autocomplete" => "Autocompletar",
"Comment/Uncomment" => "Comentar/Descomentar",
"Jump to Definition" => "Saltar a la definici&oacute;n",
"Manual" => "Manual",
"Shortcuts" => "Accesos directos",
"Settings" => "Configuraci&oacute;n",
"Search for selected" => "Buscar por lo seleccionado",
"website" => "sitio web",
"Close all tabs" => "Cerrar todas las pesta&ntilde;as",
"Alphabetize tabs" => "Ordenar pesta&ntilde;as",
"Find" => "Buscar",
"in" => "en",
"and" => "y",
"replace" => "reemplazar",
"replace all" => "reemplazar todo",
"this document" => "este documento",
"open documents" => "abrir documentos",
"all files" => "todos los archivos",
"all filenames" => "todos los nombres de archivo",
"Turn on/off..." => "Encender o apagar asistente de c&oacute;digo",
"Code Assist" => "Asistente de c&oacute;digo",
"Go to Line" => "Ir a la l&iacute;nea",
"View" => "Ver",
"Bug reporting not active" => "Reporte de Errores no activado"
),
// /LIB
"bug-files-check" =>
array(
"Found in" => "Encontrado en:"
),
"file-control" =>
array(
"Sorry" => "Lo siento",
"does not seem..." => "parace no existir en el servidor",
"Sorry, could not..." => "Lo siento, no puedo obtener el contenido de",
"Sorry, cannot create..." => "Lo siento, no puedo crear carpeta en",
"Sorry, cannot copy" => "Lo siento, no puedo copiar",
"into" => "into",
"Uploaded file(s) OK" => "Carga de archivo(s) OK",
"Sorry, cannot upload" => "Lo siento, no se puede cargar",
"Sorry, cannot upload..." => "Lo siento, no se puede cargar en modo demostraci&oacute;n",
"Sorry, cannot rename" => "Lo siento, no puedo renombrar",
"Maybe public write..." => "Posiblemente sea necesario permisos publicos en esta carpeta o su carpeta padre?",
"Sorry, cannot move" => "Lo siento, no puedo mover",
"Sorry, cannot save" => "Lo siento, no puedo guardar",
"Sorry, cannot replace..." => "Lo siento, no puedo reemplazar texto en",
"Sorry, cannot change..." => "Lo siento, no puedo cambiar permisos sobre",
"Sorry, cannot delete..." => "Lo siento, no puedo eliminar el nivel raiz",
"Sorry, cannot delete" => "Lo siento, no puedo eliminar",
"Sorry, this file..." => "Lo siento, este archivo ha cambiado, no puedo almacenar",
"Reload this file..." => "Recargar este archivo y copiar su version en un panel diferente?",
"There was a..." => "Hay un problema t&eacute;cnico, como algo que todav&iacute;a parece no estar listo. ICEcoder volvi&oacute; a cargar su archivo de control nuevamente.",
"displayed at" => "Mostrado en",
"Enter filename to..." => "Ingrese el nombre de archivo para guardar",
"That file exists..." => "Ese archivo ya existeThat, sobreescribir?",
"Saving" => "Guardando"
),
"get-branch" =>
array(
"There are no..." => "No hay diferencias entre el repositorio local y GitHub. Regresar al modo regular?",
"Sorry, there was..." => "Lo siento, hay un error, c&oacute;digo:",
"Your local folder..." => "Su carpeta local est&aacute; vac&iacute;a, desea clonarla"
),
"github-manager" =>
array(
"Sorry, cannot create..." => "Lo siento, no puedo crear un archivo en",
"Cannot update config..." => "No puedo actualizar el archivo de configuraci&oacute;n. Por favor establezca permisos publicos para",
"and try again" => "e intente nuevamente",
"saving github paths" => "almacenando rutas de GitHub...",
"github paths" => "Rutas de GitHub",
"Choose existing path" => "Seleccionar una ruta existente",
"Local path" => "Ruta local",
"Remote GitHub path" => "Ruta remota GitHub",
"Choose" => "Seleccionar",
"Set local and..." => "Establecer las rutas locales y remotas en blanco para removerlas",
"Update" => "Actualizar",
"Add new path" => "Agregar nueva ruta",
"Add" => "Agregar",
"Usage Info" => "Modo de uso:",
"Enter relative local..." => "Ingrese las rutas locales relativas (ej /server/myfiles) y las rutas absolutas para GitHub (ej https://github.com/user/repo &oacute; https://github.com/user/repo/tree/branch para indicar ramas), seg&uacute;n los ejemplos. Con esto usted establece las rutas de fuentes para ambas ubicaciones, como un par.",
"You can then..." => "Entonces usted podr&aacute; seleccionar un par y este se convertira en su nueva raiz de trabajo en ICEcoder.",
"The file manager..." => "Entonces el administrador de archivos muestra un nuevo icono para GitHub, el cual usted puede usar para ver y verificar diferencias entre las dos rutas. Esas diferencias pueden ser convertidas a un commit y enviadas a la ruta remota en GitHub o clonadas en su ruta local, para sincronizar sus archivos.",
"If you want..." => "Si lo desea puede crear una nueva ruta ra&iacute;z por medio de la pantalla de Configuraci&oacute;n."
),
"github" =>
array(
"Sorry, you do..." => "Lo siento, usted no parece contar con OpenSSL cargado en su instancia de PHP, por lo tanto conexiones https no est&aacute;n disponibles. Esto es requerido para la transferencia de datos a GitHub, por favor ajuste su php.ini, reinicie su servidor web e intente nuevamente"
),
"headers" =>
array(
"Bad CSRF token..." => "Token CSRF incorrecto. Por favor reporte este error en https://github.com/mattpass/ICEcoder para que pueda ser solucionado."
),
"help" =>
array(
"shortcuts" => "accesos directos",
"Within document" => "En los documentos",
"On Tabs" => "En las fichas",
"Within file manager" => "En el administrador de archivos",
"Anywhere" => "Cualquier parte",
"Space" => "Espacio",
"Click" => "Click",
"or" => "o",
"Left click" => "Click izquierdo",
"Middle click" => "Click central",
"Double click tap..." => "Doble click / tap (m&oacute;viles)",
"Right click" => "Click derecho",
"Middle scrollwheel" => "Rueda del rat&oacute;n",
"Drag" => "Arrastrar",
"Autocomplete add snippet" => "Autocompletar / agregar fragmento",
"Multiple select" => "Selecci&oacute;n m&uacute;ltiple",
"Move line up" => "Mover l&iacute;nea arriba",
"Move line down" => "Mover l&iacute;nea abajo",
"Duplicate lines" => "Duplicar linea(s)",
"Remove lines" => "Remover linea(s)",
"Insert line before" => "Insertar linea antes",
"Insert line after" => "Insertar linea despu&eacute;s",
"Search for selected" => "Buscar lo seleccionado",
"Jump to definition" => "Saltar a definici&oacute;n / saltar atr&aacute;s",
"Comment uncomment" => "Comentar / descomentar",
"Insert tab indent" => "Insertar ficha / auto sangr&iacute;a seleccionado",
"Insert more" => "Aumentar sangr&iacute;a",
"Insert less" => "Disminuir sangr&iacute;a",
"Wrap with div" => "Envolver con &lt;div&gt;",
"Wrap with span" => "Envolver con &lt;span&gt;",
"Wrap unwrap p" => "Envolver / Desenvolver con &lt;p&gt;",
"Wrap unwrap a" => "Envolver / Desenvolver con &lt;a&gt;",
"Wrap unwrap b" => "Envolver / Desenvolver con &lt;b&gt;",
"Wrap unwrap i" => "Envolver / Desenvolver con &lt;i&gt;",
"Wrap unwrap strong" => "Envolver / Desenvolver con &lt;strong&gt;",
"Wrap unwrap em" => "Envolver / Desenvolver con &lt;em&gt;",
"Wrap unwrap li" => "Envolver / Desenvolver con &lt;li&gt;",
"Wrap unwrap h1..." => "Envolver / Desenvolver con &lt;h1&gt; - &lt;h3&gt;",
"End line with..." => "Terminar l&iacute;nea con &lt;br&gt;",
"Close tab" => "Cerrar ficha",
"Select file folder" => "Seleccionar archivo / carpeta",
"Open file" => "Abrir archivo",
"Range select" => "Seleccionar rango",
"Options for selected" => "Opciones para lo seleccionado",
"Delete selected" => "Eliminar seleccionados",
"Next previous tab" => "Ficha siguiente / previa",
"Next tab" => "Ficha siguiente",
"Previous tab" => "Ficha previa",
"New tab" => "Nueva ficha",
"Close current tab" => "Cerrar ficha actual",
"Open file prompt" => "L&iacute;nea de apertura de archivos",
"Find" => "Buscar",
"Focus on Go..." => "Obtener foco en la opci&oacute;n Ir a Linea",
"Save" => "Guardar",
"Save as" => "Guardar como...",
"View webpage" => "Ver pagina web",
"Contract expand file..." => "Contraer / expandir administrador de archivos",
"Fold unfold current..." => "Contraer / expandir l&iacute;nea actual",
"Refocus on document" => "Reasignar foco al documento",
"Cancel tasks" => "Cancelar tareas"
),
"ice-coder" =>
array(
"No text selected..." => "No hay texto seleccionado para buscar",
"all files" => "todos los archivos",
"all filenames" => "todos los nombres de archivo",
"selected files" => "archivos seleccionados",
"selected filenames" => "nombres de archivos seleccionados",
"Creating Folder" => "Creando Carpeta",
"Sorry you can..." => "Lo siento, usted s&oacute;lo puede tener 100 archivos abiertos al tiempo!",
"Opening File" => "Abriendo archivo",
"Enter relative file..." => "Entre una ruta relativa (iniciando con /) o una URL remota",
"Getting" => "Obteniendo",
"Please enter the..." => "Por favor ingrese el nuevo nombre para",
"Renaming to" => "Renombrando a",
"Moving to" => "Moviendo a",
"Deleting File" => "Eliminando Archivo",
"Pasting File" => "Copiando Archivo",
"Sorry cannot paste..." => "Lo siento, no puedo pegar toda una ra&iacute;z",
"Nothing to paste..." => "Nada para pegar, copie un archivo/carpeta primero!",
"and" => "y",
"this document" => "este documento",
"replace" => "reemplazar",
"replace all" => "reemplazar todo",
"file" => "archivo",
"Replacing text in" => "Reemplazando texto en",
"Cancelled tasks" => "Tareas canceladas",
"Open previous files" => "Abrir archivos previos?",
"Please enter your..." => "Por favor entre su token de GitHub (para acceso personal). Ver ayuda cerca al Token de autenticaci&oacute;n de Github en la ayuda > Vea pantalla de configuraci&oacute;n para m&aacute;s informaci&oacute;n",
"This will compare..." => "Esto compara y muestra las diferencias entre su ruta local y el repositorio. OK?",
"Please note for..." => "Importante: para que la actualizaci&oacute;n trabaje correctamente, usted necesita tener derechos de acceso a todos los directorios y archivos de ICEcoder. Esto sera chequeado previamente y se presentara una lista de archivos sin acceso (por lo tanto no movibles).\\n\\nSi usted necesita restablecer esta version de ICEcoder por alguna raz&oacute;n, usted la encontrara en la carpeta /tmp.\\n\\nClick en OK para proceder con la verificaci&oacute;n y auto-instalaci&oacute;n, &oacute; cancelar para visitar el sitio de ICEcoder para descargar el ZIP y hacerlo manualmente.",
"You can start..." => "Usted puede iniciar el reporte de errores en la pantalla de Ayuda > Configuraci&oacute;n",
"Error cannot find..." => "Error: no puedo encontrar o accesar las rutas de archivos de error",
"No new errors..." => "No fueron encontrados nuevos errores",
"You have made..." => "Usted ha realizado cambios. Esta seguro que quiere cerrar sin guardar?",
"Close all tabs" => "Cerrar todas las fichas?",
"results" => "resultados"
),
"login" =>
array(
"set password" => "establecer clave",
"login" => "ingreso",
"To disable registration..." => "Para deshabilitar el modo de registro, vaya a la opci&oacute;n de Configuraci&oacute;n or abra el archivo lib/config___settings.php y cambie enableRegistration a false y recargue la p&aacute;gina",
"Registration mode enabled" => "Modo de registro activado",
"auto-check for updates" => "auto-buscar por actualizaciones",
"To put into..." => "Para usar el modo multiusuario, vaya a la opcion de Configuraci&oacute;n o abra el archivo lib/config___settings.php y cambie multiUser a true y recargue la p&aacute;gina",
"multi-user" => "multi-usuario"
),
"multiple-results" =>
array(
"rename all" => "renombrar todo",
"replace all" => "reemplazar todo",
"document" => "documento",
"Found" => "Encontrado",
"times" => "veces",
"replace" => "reemplazar",
"file folder" => "archivo/carpeta",
"rename to" => "renombrar a",
"rename" => "renombrar",
"file" => "archivo",
"No matches found" => "No se encontraron coincidencias",
"selected" => "seleccionado",
"found in" => "encontrado en",
"Replaced" => "Reemplezado"
),
"plugins-manager" =>
array(
"ICEcoder needs to..." => "ICEcoder necesita recargar para activar este plugin. Recargar ahora?",
"saving plugins" => "guardando plugins...",
"Cannot update config..." => "No puedo actualizar el archivo de configuraci&oacute;n. Por favor establezca permisos publicos sobre",
"and try again" => "e intente de nuevo",
"couldnt delete dir" => "no puedo borrar el directorio",
"couldnt delete file" => "no puedo borrar el archivo",
"plugins" => "plugins",
"Guide to writing..." => "Guia para escribir plugins",
"Manage Installed" => "Administrador instalado",
"URL" => "URL",
"Target" => "Objetivo",
"Timer" => "Temporizador",
"Update" => "Actualizar",
"Install" => "Instalar",
"Uninstall" => "Desinstalar",
"Reload after install..." => "Se requiere recargar despu&eacute;s de instalar"
),
"properties" =>
array(
"properties" => "propiedades",
"Size" => "Tama&ntilde;o",
"Modified" => "Modificado",
"Last access" => "Ultimo acceso",
"Type" => "Tipo",
"Readable Writeable" => "Leible / Escribible",
"Relative path" => "Ruta relativa",
"Absolute path" => "Ruta absoluta",
"Contains" => "Contiene",
"Permissions" => "Permisos",
"Owner" => "Propietario",
"Group" => "Grupo",
"Public" => "Publico",
"Read" => "Leer",
"Write" => "Escribir",
"Execute" => "Ejecutar",
"Change to" => "Cambiar a",
"update" => "actualizar"
),
"settings-common" =>
array(
"Your document does..." => "Su documento no parece estar en UTF-8 entonces se ha convertido"
),
"settings-save-current-files" =>
array(
"Cannot update config..." => "No puedo actualizar el archivo de configuracion. Por favor establezca permisos publicos sobre",
"and try again" => "e intente de nuevo"
),
"settings-screen" =>
array(
"settings" => "configuraciones",
"version" => "version",
"website" => "sitio web",
"git" => "git",
"codemirror dir" => "directorio codemirror",
"codemirror version" => "version codemirror",
"file manager root" => "administrador de archivos raiz",
"Free to use..." => "Libre para usarlo para cualquier prop&oacute;sito, comercial o no, solo dejeme saber cualquier uso o mejora. :)<br><br>No se da garantia de ningun tipo, su uso se encuentra bajo su responsabilidad.<br><br>Muchas personas y compa&ntilde;&iacute;as han ayudado a construir ICEcoder por lo que les damos las gracias. Por favor vea la lista completa en",
"functionality" => "funcionalidad",
"check for updates..." => "verificar por actualizaciones en la carga",
"auto open last..." => "auto cargar los ultimos archivos al ingresar",
"when finding in..." => "excluir cuando se busca en archivos ",
"assisting" => "asistir",
"code assist" => "asistencia de c&oacute;digo",
"visible tabs" => "Fichas visibles",
"locked nav" => "Navegacion bloqueada",
"tag wrapper command" => "Comando envuelto",
"auto-complete on" => "auto-completar encendido",
"security" => "seguridad",
"new password" => "nueva clave",
"8 chars min" => "8 caracteres min",
"confirm password" => "confirmar clave",
"banned files/folders" => "archivos/carpetas prohibidos",
"banned paths" => "rutas prohibidas",
"ip addresses" => "direcciones ip",
"Slash prefixed comma..." => "Prefijo slash, delimitado por comas",
"Comma delimited" => "Delimitado por comas",
"style" => "estilo",
"theme" => "tema",
"line wrapping" => "ajuste de l&iacute;nea",
"indent type" => "tipode sangr&iacute;a",
"indent size" => "Tama&ntilde;o de sangr&iacute;a",
"font size" => "tama&ntilde;o de letra",
"layout" => "disposici&oacute;n",
"plugin panel aligned" => "alineacion del panel de plugins",
"file manager" => "administrador de archivos",
"root" => "raiz",
"Slash prefixed" => "Prefijo Slash",
"bug reporting" => "reporte de errores",
"check in files" => "chequear en archivos",
"every" => "cada",
"secs getting last" => "seg, obteniendo &uacute;ltimas",
"lines" => "lineas",
"multi-user" => "multi-usuario",
"Make sure you..." => "Este seguro de no bloquearse a s&iacute; mismo",
"Registration" => "Registro",
"auth token" => "token autenticaci&oacute;n",
"Required to get..." => "Requerido para obtener diferencias, enviar cambios a repos GitHub, etc. Si usted no tiene uno, usted puede usar un:".PHP_EOL.PHP_EOL.
"- token personal de acceso (https://help.github.com/articles/creating-an-access-token-for-command-line-use), &oacute;".PHP_EOL.
"- full client/secret pair token (http://developer.github.com/v3/oauth).".PHP_EOL.PHP_EOL.
"Esto no es recomendado para establecer su token pues es mas seguro ingresarlo cuando sea solicitado por ICEcoder y as&iacute; permenecer&aacute; en la sesi&oacute;n activa unicamente.".PHP_EOL.PHP_EOL.
"De todas formas, si usted trabaj en un ambiente seguro, es m&aacute;s eficiente establecer esto aqu&iacute;.",
"Sorry cannot commit..." => "Lo siento, no puedo enviar configuraciones en modo demo",
"update" => "actualizar"
),
"settings-update" =>
array(
"Cannot update config..." => "No puedo actualizar archivo de configuraci&oacute;n. Establezca permisos publicos sobre",
"and try again" => "e intente de nuevo",
"and press refresh" => "y presione actualizar"
),
"updater" =>
array(
"Update appears to..." => "La actualizaci&oacute;n parece haber sido satisfactoria"
)
);
?>

115
lib/bug-files-check.php Normal file
View File

@@ -0,0 +1,115 @@
<?php
// Load common functions
include("headers.php");
include_once("settings-common.php");
$text = $_SESSION['text'];
$t = $text['bug-files-check'];
$files = explode(",",str_replace("|","/",$_GET['files']));
$filesSizesSeen = explode(",",$_GET['filesSizesSeen']);
$maxLines = $_GET['maxLines'];
$result = "ok";
for ($i=0; $i<count($files); $i++) {
// Work out the real path for a file
$files[$i] = realpath($_SERVER['DOCUMENT_ROOT'].$files[$i]);
// If we can't find that file or it doesn't start with the doc root, it's an error
if (!file_exists($files[$i]) || strpos(str_replace("\\","/",$files[$i]),$_SERVER['DOCUMENT_ROOT']) !== 0) {
$result = "error";
} else {
$filesSizesSeen[$i] = filesize($files[$i]);
}
}
if ($result != "error") {
$filesWithNewBugs = 0;
for ($i=0; $i<count($files); $i++) {
// If we have set a filesize value previously and it's different to now, there's new bugs
$fileSizesSeenArray = explode(",",$_GET['filesSizesSeen']);
if ($fileSizesSeenArray[$i]!="null" && $fileSizesSeenArray[$i] != $filesSizesSeen[$i]) {
$result = "bugs";
$filesWithNewBugs++;
$filename = $files[$i];
$chars = ($filesSizesSeen[$i]-$fileSizesSeenArray[$i]);
$buffer = 4096;
$lines = $maxLines+1+1; // 1 (possibly) for end of file and 1 for partial lines
// Open the file
$f = fopen($filename, "rb");
// Jump to last character
fseek($f, 0, SEEK_END);
// If we don't have a line at end, deduct 1 from $lines to get
if(fread($f, 1) != "\n") $lines -= 1;
// Start reading
$output = "";
$chunk = "";
// While we would like more
while(ftell($f) > 0 && $chars > 0 && $lines > 0) {
// Figure out how far back we should jump
$seek = min($chars, $buffer);
// Do the jump (backwards, relative to where we are)
fseek($f, -$seek, SEEK_CUR);
// Read a chunk and prepend it to our output
$output = ($chunk = fread($f, $seek)).$output;
// Jump back to where we started reading
fseek($f, -mb_strlen($chunk, '8bit'), SEEK_CUR);
// Take this seek chunk off the number of chars
$chars -= $seek;
// Deduct new lines found in this chunk from $lines
$lines -= substr_count($chunk, "\n");
}
// Close file
fclose($f);
// OK, now we have bug lines to output, save to our file
$output = rtrim(str_replace("\r\n","\n",$output));
$output = explode("\n",$output);
$output = array_slice($output, -$maxLines);
$output = $t['Found in']." ".$filename."...\n".implode("\n",$output);
if ($filesWithNewBugs==1) {
file_put_contents("../tmp/bug-report.log", $output);
} else {
file_put_contents("../tmp/bug-report.log", "\n\n".$output, FILE_APPEND);
}
}
}
}
// Get dir name tmp dir's parent
$tmpLoc = dirname(__FILE__);
$tmpLoc = explode(DIRECTORY_SEPARATOR,$tmpLoc);
$tmpLoc = $tmpLoc[count($tmpLoc)-2];
// Output result and status array
$status = array(
"files" => $files,
"filesSizesSeen" => $filesSizesSeen,
"maxLines" => $maxLines,
"bugReportPath" => "|".$tmpLoc."|tmp|bug-report.log",
"result" => $result
);
// Include our process once our bug checking work is done
include("../processes/on-bug-check.php");
// Finally, display our status in JSON format as the XHR response text
echo json_encode($status);
?>

View File

@@ -1,25 +0,0 @@
<?php
$ICEcoder = array(
"root" => "",
"tabsIndent" => true,
"checkUpdates" => true,
"openLastFiles" => true,
"findFilesExclude" => array("_coder","ICEcoder",".doc",".gif",".jpg",".jpeg",".pdf",".png",".swf",".xml",".zip"),
"codeAssist" => true,
"visibleTabs" => false,
"lockedNav" => true,
"accountPassword" => "",
"bannedFiles" => array("_coder","ICEcoder"),
"allowedIPs" => array("*"),
"plugins" => array(
array("Adminer","plugins/adminer/icon.png","margin-top: 3px","plugins/adminer/adminer-3.4.0-mysql-en.php","_blank",""),
array("Zip It!","plugins/zip-it/icon.png","margin-top: 3px; margin-left: 3px","plugins/zip-it/?zip=|&exclude=*.doc*.gif*.jpg*.jpeg*.pdf*.png*.swf*.xml*.zip","fileControl:<b>Zipping Files</b>","30"),
array("ICErepo","plugins/ice-repo/icon.png","margin-top: 3px","plugins/ice-repo","_blank",""),
array("Dochub","plugins/dochub/icon.png","margin-top: 3px","http://dochub.io","_blank","")
),
"theme" => "default",
"tabWidth" => 4,
"previousFiles" => "",
"last10Files" => ""
);
?>

View File

@@ -0,0 +1,39 @@
<?php
$ICEcoderUserSettings = array(
"versionNo" => "5.1",
"licenseEmail" => "",
"licenseCode" => "",
"configCreateDate" => 0,
"root" => "",
"checkUpdates" => true,
"openLastFiles" => true,
"updateDiffOnSave" => true,
"languageUser" => "english.php",
"findFilesExclude" => array(".doc",".gif",".jpg",".jpeg",".pdf",".png",".swf",".xml",".zip"),
"codeAssist" => true,
"visibleTabs" => false,
"lockedNav" => true,
"tagWrapperCommand" => "ctrl+alt",
"autoComplete" => "keypress",
"password" => "",
"bannedFiles" => array(),
"bannedPaths" => array("/var/www/.git","/var/www/sites/all/modules","/var/www/sites/default/files"),
"allowedIPs" => array("*"),
"theme" => "default",
"fontSize" => "13px",
"lineWrapping" => true,
"indentWithTabs" => true,
"indentAuto" => true,
"indentSize" => 4,
"pluginPanelAligned" => "left",
"bugFilePaths" => array(),
"bugFileCheckTimer" => 0,
"bugFileMaxLines" => 0,
"githubAuthToken" => "",
"plugins" => array(),
"githubLocalPaths" => array(),
"githubRemotePaths" => array(),
"previousFiles" => "",
"last10Files" => ""
);
?>

412
lib/difflib.js Normal file
View File

@@ -0,0 +1,412 @@
/***
This is part of jsdifflib v1.0. <http://snowtide.com/jsdifflib>
Copyright (c) 2007, Snowtide Informatics Systems, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Snowtide Informatics Systems nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
/* Author: Chas Emerick <cemerick@snowtide.com> */
var __whitespace = {" ":true, "\t":true, "\n":true, "\f":true, "\r":true};
var difflib = {
defaultJunkFunction: function (c) {
return __whitespace.hasOwnProperty(c);
},
stripLinebreaks: function (str) { return str.replace(/^[\n\r]*|[\n\r]*$/g, ""); },
stringAsLines: function (str) {
var lfpos = str.indexOf("\n");
var crpos = str.indexOf("\r");
var linebreak = ((lfpos > -1 && crpos > -1) || crpos < 0) ? "\n" : "\r";
var lines = str.split(linebreak);
for (var i = 0; i < lines.length; i++) {
lines[i] = difflib.stripLinebreaks(lines[i]);
}
return lines;
},
// iteration-based reduce implementation
__reduce: function (func, list, initial) {
if (initial != null) {
var value = initial;
var idx = 0;
} else if (list) {
var value = list[0];
var idx = 1;
} else {
return null;
}
for (; idx < list.length; idx++) {
value = func(value, list[idx]);
}
return value;
},
// comparison function for sorting lists of numeric tuples
__ntuplecomp: function (a, b) {
var mlen = Math.max(a.length, b.length);
for (var i = 0; i < mlen; i++) {
if (a[i] < b[i]) return -1;
if (a[i] > b[i]) return 1;
}
return a.length == b.length ? 0 : (a.length < b.length ? -1 : 1);
},
__calculate_ratio: function (matches, length) {
return length ? 2.0 * matches / length : 1.0;
},
// returns a function that returns true if a key passed to the returned function
// is in the dict (js object) provided to this function; replaces being able to
// carry around dict.has_key in python...
__isindict: function (dict) {
return function (key) { return dict.hasOwnProperty(key); };
},
// replacement for python's dict.get function -- need easy default values
__dictget: function (dict, key, defaultValue) {
return dict.hasOwnProperty(key) ? dict[key] : defaultValue;
},
SequenceMatcher: function (a, b, isjunk) {
this.set_seqs = function (a, b) {
this.set_seq1(a);
this.set_seq2(b);
}
this.set_seq1 = function (a) {
if (a == this.a) return;
this.a = a;
this.matching_blocks = this.opcodes = null;
}
this.set_seq2 = function (b) {
if (b == this.b) return;
this.b = b;
this.matching_blocks = this.opcodes = this.fullbcount = null;
this.__chain_b();
}
this.__chain_b = function () {
var b = this.b;
var n = b.length;
var b2j = this.b2j = {};
var populardict = {};
for (var i = 0; i < b.length; i++) {
var elt = b[i];
if (b2j.hasOwnProperty(elt)) {
var indices = b2j[elt];
if (n >= 200 && indices.length * 100 > n) {
populardict[elt] = 1;
delete b2j[elt];
} else {
indices.push(i);
}
} else {
b2j[elt] = [i];
}
}
for (var elt in populardict) {
if (populardict.hasOwnProperty(elt)) {
delete b2j[elt];
}
}
var isjunk = this.isjunk;
var junkdict = {};
if (isjunk) {
for (var elt in populardict) {
if (populardict.hasOwnProperty(elt) && isjunk(elt)) {
junkdict[elt] = 1;
delete populardict[elt];
}
}
for (var elt in b2j) {
if (b2j.hasOwnProperty(elt) && isjunk(elt)) {
junkdict[elt] = 1;
delete b2j[elt];
}
}
}
this.isbjunk = difflib.__isindict(junkdict);
this.isbpopular = difflib.__isindict(populardict);
}
this.find_longest_match = function (alo, ahi, blo, bhi) {
var a = this.a;
var b = this.b;
var b2j = this.b2j;
var isbjunk = this.isbjunk;
var besti = alo;
var bestj = blo;
var bestsize = 0;
var j = null;
var k;
var j2len = {};
var nothing = [];
for (var i = alo; i < ahi; i++) {
var newj2len = {};
var jdict = difflib.__dictget(b2j, a[i], nothing);
for (var jkey in jdict) {
if (jdict.hasOwnProperty(jkey)) {
j = jdict[jkey];
if (j < blo) continue;
if (j >= bhi) break;
newj2len[j] = k = difflib.__dictget(j2len, j - 1, 0) + 1;
if (k > bestsize) {
besti = i - k + 1;
bestj = j - k + 1;
bestsize = k;
}
}
}
j2len = newj2len;
}
while (besti > alo && bestj > blo && !isbjunk(b[bestj - 1]) && a[besti - 1] == b[bestj - 1]) {
besti--;
bestj--;
bestsize++;
}
while (besti + bestsize < ahi && bestj + bestsize < bhi &&
!isbjunk(b[bestj + bestsize]) &&
a[besti + bestsize] == b[bestj + bestsize]) {
bestsize++;
}
while (besti > alo && bestj > blo && isbjunk(b[bestj - 1]) && a[besti - 1] == b[bestj - 1]) {
besti--;
bestj--;
bestsize++;
}
while (besti + bestsize < ahi && bestj + bestsize < bhi && isbjunk(b[bestj + bestsize]) &&
a[besti + bestsize] == b[bestj + bestsize]) {
bestsize++;
}
return [besti, bestj, bestsize];
}
this.get_matching_blocks = function () {
if (this.matching_blocks != null) return this.matching_blocks;
var la = this.a.length;
var lb = this.b.length;
var queue = [[0, la, 0, lb]];
var matching_blocks = [];
var alo, ahi, blo, bhi, qi, i, j, k, x;
while (queue.length) {
qi = queue.pop();
alo = qi[0];
ahi = qi[1];
blo = qi[2];
bhi = qi[3];
x = this.find_longest_match(alo, ahi, blo, bhi);
i = x[0];
j = x[1];
k = x[2];
if (k) {
matching_blocks.push(x);
if (alo < i && blo < j)
queue.push([alo, i, blo, j]);
if (i+k < ahi && j+k < bhi)
queue.push([i + k, ahi, j + k, bhi]);
}
}
matching_blocks.sort(difflib.__ntuplecomp);
var i1 = 0, j1 = 0, k1 = 0, block = 0;
var i2, j2, k2;
var non_adjacent = [];
for (var idx in matching_blocks) {
if (matching_blocks.hasOwnProperty(idx)) {
block = matching_blocks[idx];
i2 = block[0];
j2 = block[1];
k2 = block[2];
if (i1 + k1 == i2 && j1 + k1 == j2) {
k1 += k2;
} else {
if (k1) non_adjacent.push([i1, j1, k1]);
i1 = i2;
j1 = j2;
k1 = k2;
}
}
}
if (k1) non_adjacent.push([i1, j1, k1]);
non_adjacent.push([la, lb, 0]);
this.matching_blocks = non_adjacent;
return this.matching_blocks;
}
this.get_opcodes = function () {
if (this.opcodes != null) return this.opcodes;
var i = 0;
var j = 0;
var answer = [];
this.opcodes = answer;
var block, ai, bj, size, tag;
var blocks = this.get_matching_blocks();
for (var idx in blocks) {
if (blocks.hasOwnProperty(idx)) {
block = blocks[idx];
ai = block[0];
bj = block[1];
size = block[2];
tag = '';
if (i < ai && j < bj) {
tag = 'replace';
} else if (i < ai) {
tag = 'delete';
} else if (j < bj) {
tag = 'insert';
}
if (tag) answer.push([tag, i, ai, j, bj]);
i = ai + size;
j = bj + size;
if (size) answer.push(['equal', ai, i, bj, j]);
}
}
return answer;
}
// this is a generator function in the python lib, which of course is not supported in javascript
// the reimplementation builds up the grouped opcodes into a list in their entirety and returns that.
this.get_grouped_opcodes = function (n) {
if (!n) n = 3;
var codes = this.get_opcodes();
if (!codes) codes = [["equal", 0, 1, 0, 1]];
var code, tag, i1, i2, j1, j2;
if (codes[0][0] == 'equal') {
code = codes[0];
tag = code[0];
i1 = code[1];
i2 = code[2];
j1 = code[3];
j2 = code[4];
codes[0] = [tag, Math.max(i1, i2 - n), i2, Math.max(j1, j2 - n), j2];
}
if (codes[codes.length - 1][0] == 'equal') {
code = codes[codes.length - 1];
tag = code[0];
i1 = code[1];
i2 = code[2];
j1 = code[3];
j2 = code[4];
codes[codes.length - 1] = [tag, i1, Math.min(i2, i1 + n), j1, Math.min(j2, j1 + n)];
}
var nn = n + n;
var group = [];
var groups = [];
for (var idx in codes) {
if (codes.hasOwnProperty(idx)) {
code = codes[idx];
tag = code[0];
i1 = code[1];
i2 = code[2];
j1 = code[3];
j2 = code[4];
if (tag == 'equal' && i2 - i1 > nn) {
group.push([tag, i1, Math.min(i2, i1 + n), j1, Math.min(j2, j1 + n)]);
groups.push(group);
group = [];
i1 = Math.max(i1, i2-n);
j1 = Math.max(j1, j2-n);
}
group.push([tag, i1, i2, j1, j2]);
}
}
if (group && !(group.length == 1 && group[0][0] == 'equal')) groups.push(group)
return groups;
}
this.ratio = function () {
matches = difflib.__reduce(
function (sum, triple) { return sum + triple[triple.length - 1]; },
this.get_matching_blocks(), 0);
return difflib.__calculate_ratio(matches, this.a.length + this.b.length);
}
this.quick_ratio = function () {
var fullbcount, elt;
if (this.fullbcount == null) {
this.fullbcount = fullbcount = {};
for (var i = 0; i < this.b.length; i++) {
elt = this.b[i];
fullbcount[elt] = difflib.__dictget(fullbcount, elt, 0) + 1;
}
}
fullbcount = this.fullbcount;
var avail = {};
var availhas = difflib.__isindict(avail);
var matches = numb = 0;
for (var i = 0; i < this.a.length; i++) {
elt = this.a[i];
if (availhas(elt)) {
numb = avail[elt];
} else {
numb = difflib.__dictget(fullbcount, elt, 0);
}
avail[elt] = numb - 1;
if (numb > 0) matches++;
}
return difflib.__calculate_ratio(matches, this.a.length + this.b.length);
}
this.real_quick_ratio = function () {
var la = this.a.length;
var lb = this.b.length;
return _calculate_ratio(Math.min(la, lb), la + lb);
}
this.isjunk = isjunk ? isjunk : difflib.defaultJunkFunction;
this.a = this.b = null;
this.set_seqs(a, b);
}
};

21
lib/download.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
include("headers.php");
include("settings.php");
// Establish the real absolute path to the file
$file = realpath($docRoot.$iceRoot.str_replace("|","/",strClean($_GET['file'])));
// If it doesn't exist, or doesn't start with the $docRoot, stop here
if (!file_exists($file) || strpos(str_replace("\\","/",$file),$docRoot) !== 0) {
die("<script>alert('Sorry, that file doesn\'t appear to exist');</script>");
}
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Length: '.filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>

View File

@@ -1,40 +1,40 @@
/* ICE coder default theme: Based VERY loosely on Monokai */
/* ICEcoder default theme by Matt Pass */
.cm-s-icecoder {color: #666; background: #1c1c19}
.cm-s-icecoder {color: #666; background: #141612}
.cm-s-icecoder span.cm-keyword {color: #f8f8f8; font-weight:bold}
.cm-s-icecoder span.cm-atom {color: #ae81ff}
.cm-s-icecoder span.cm-number {color: #0a0}
.cm-s-icecoder span.cm-def {color: #fd971f}
.cm-s-icecoder span.cm-keyword {color: #eee; font-weight:bold} /* off-white 1 */
.cm-s-icecoder span.cm-atom {color: #e1c76e} /* yellow */
.cm-s-icecoder span.cm-number {color: #6cb5d9} /* blue */
.cm-s-icecoder span.cm-def {color: #b9ca4a} /* green */
.cm-s-icecoder span.cm-variable {color: #a6e22e}
.cm-s-icecoder span.cm-variable-2 {color: #f92672}
.cm-s-icecoder span.cm-variable-3 {color: #0a0}
.cm-s-icecoder span.cm-variable {color: #6cb5d9} /* blue */
.cm-s-icecoder span.cm-variable-2 {color: #bf255c} /* pink */
.cm-s-icecoder span.cm-variable-3 {color: #f9602c} /* orange */
.cm-s-icecoder span.cm-property {color: #a6e22e}
.cm-s-icecoder span.cm-operator {color: #0a0}
.cm-s-icecoder span.cm-comment {color: #444}
.cm-s-icecoder span.cm-property {color: #eee} /* off-white 1 */
.cm-s-icecoder span.cm-operator {color: #9179bb} /* purple */
.cm-s-icecoder span.cm-comment {color: #97a3aa} /* grey-blue */
.cm-s-icecoder span.cm-string {color: #fd0}
.cm-s-icecoder span.cm-string-2 {color: #f80}
.cm-s-icecoder span.cm-string {color: #b9ca4a} /* green */
.cm-s-icecoder span.cm-string-2 {color: #6cb5d9} /* blue */
.cm-s-icecoder span.cm-meta {color: #555}
.cm-s-icecoder span.cm-error {color: #f00}
.cm-s-icecoder span.cm-meta {color: #555} /* grey */
.cm-s-icecoder span.cm-error {color: #d00} /* red */
.cm-s-icecoder span.cm-qualifier {color: #555}
.cm-s-icecoder span.cm-builtin {color: #06c}
.cm-s-icecoder span.cm-bracket {color: #cc7}
.cm-s-icecoder span.cm-qualifier {color: #555} /* grey */
.cm-s-icecoder span.cm-builtin {color: #214e7b} /* bright blue */
.cm-s-icecoder span.cm-bracket {color: #cc7} /* grey-yellow */
.cm-s-icecoder span.cm-tag {color: #e8e8e8}
.cm-s-icecoder span.cm-attribute {color: #00b8bb}
.cm-s-icecoder span.cm-tag {color: #e8e8e8} /* off-white 2 */
.cm-s-icecoder span.cm-attribute {color: #099} /* teal */
.cm-s-icecoder span.cm-header {color: #a0a}
.cm-s-icecoder span.cm-quote {color: #090}
.cm-s-icecoder span.cm-hr {color: #999}
.cm-s-icecoder span.cm-link {color: #ff0}
.cm-s-icecoder span.cm-header {color: #6a0d6a} /* purple-pink */
.cm-s-icecoder span.cm-quote {color: #186718} /* dark green */
.cm-s-icecoder span.cm-hr {color: #888} /* mid-grey */
.cm-s-icecoder span.cm-link {color: #e1c76e} /* yellow */
.cm-s-icecoder .CodeMirror-cursor {border-left: 1px solid white !important}
.cm-s-icecoder .CodeMirror-selected {background: #037 !important}
.cm-s-icecoder .CodeMirror-gutter {background: #333; border-right: 1px solid #e8e8e8}
.cm-s-icecoder .CodeMirror-gutter-text {color: #999; width: 35px; cursor: default}
.cm-s-icecoder .CodeMirror-selected {color: #fff !important; background: #037 !important}
.cm-s-icecoder .CodeMirror-gutters {background: #141612; min-width: 41px; border-right: 0}
.cm-s-icecoder .CodeMirror-linenumber {color: #555; cursor: default}
.cm-s-icecoder .CodeMirror-matchingbracket {border: 1px solid grey; color: black !important}

634
lib/file-control-xhr.php Normal file
View File

@@ -0,0 +1,634 @@
<?php
include("headers.php");
include("settings.php");
$t = $text['file-control'];
// ===============================
// SET OUR ERROR INFO TO A DEFAULT
// ===============================
$error = false;
$errorStr = "false";
$errorMsg = "None";
// ==============================
// GET CLEANED FILENAMES OR ERROR
// ==============================
// Get the save type if any
$saveType = isset($_GET['saveType']) ? strClean($_GET['saveType']) : "";
// Establish the filename/new filename
if (isset($_POST['newFileName']) && $_POST['newFileName']!="") {
$file = $_POST['newFileName']; // New file
} elseif (isset($_REQUEST['file'])) {
$file = $_REQUEST['file']; // Existing file
} else {
$file = ""; // Error
$finalAction = "nothing";
$doNext = "";
$error = true;
$errorStr = "true";
$errorMsg = $t['Sorry, bad filename...'];
};
// If we have file(s) to work with...
if (!$error) {
// Replace pipes with slashes, after cleaning the chars
$file = str_replace("|","/",strClean($file));
// Establish the actual name as we may have HTML entities in filename
$file = html_entity_decode($file);
// Put the original $file var aside for use
$fileOrig = $file;
// Trim any +'s or spaces from the end of file
$file = rtrim(rtrim($file,'+'),' ');
// Also remove [NEW] from $file, we can consider $_GET['action'] or $fileOrig to pick that up
$file = rtrim($file,'[NEW]');
// Make each path in $file a full path (; seperated list)
$allFiles = explode(";",$file);
for ($i=0; $i<count($allFiles); $i++) {
if (strpos($allFiles[$i],$docRoot)===false && $_GET['action']!="getRemoteFile") {
$allFiles[$i]=str_replace("|","/",$docRoot.$iceRoot.$allFiles[$i]);
}
};
$file = implode(";",$allFiles);
// Establish the $fileLoc and $fileName (used in single file cases, eg opening. Multiple file cases, eg deleting, is worked out in that loop)
$fileLoc = substr(str_replace($docRoot,"",$file),0,strrpos(str_replace($docRoot,"",$file),"/"));
$fileName = basename($file);
// Check through all files to make sure they're valid/safe
$allFiles = explode(";",$file);
for ($i=0; $i<count($allFiles); $i++) {
// Uncomment to alert and console.log the action and file, useful for debugging
// echo ";alert('".xssClean($_GET['action'],"html")." : ".$allFiles[$i]."');console.log('".xssClean($_GET['action'],"html")." : ".$allFiles[$i]."');";
// Die if the file requested isn't something we expect
if(
// A local folder that isn't the doc root or starts with the doc root
($_GET['action']!="getRemoteFile" &&
rtrim($allFiles[$i],"/") !== rtrim($docRoot,"/") &&
strpos(realpath(rtrim(dirname($allFiles[$i]),"/")),realpath(rtrim($docRoot,"/"))) !== 0
) ||
// Or a remote URL that doesn't start http
($_GET['action']=="getRemoteFile" && strpos($allFiles[$i],"http") !== 0)
) {
$error = true;
$errorStr = "true";
$errorMsg = "Sorry! - problem with file requested";
};
}
}
// ============
// SAVING FILES
// ============
if (!$error && $_GET['action']=="save") {
// ====================================
// NEW FILES AND SAVE AS XHR LOOPAROUND
// ====================================
if (strpos($fileOrig,"[NEW]")>0||$saveType=="saveAs") {
$finalAction = strpos($fileOrig,"[NEW]")>0 ? "save as" : "save";
$fileURL = isset($file) ? $file : "";
$fileMDTURLPart = isset($_GET["fileMDT"]) && $_GET["fileMDT"]!="undefined" ? "&fileMDT=".numClean($_GET['fileMDT']) : "";
$doNext = '
top.ICEcoder.serverMessage();
fileLoc = "'.$fileLoc.'";
newFileName = top.ICEcoder.getInput("'.$t['Enter filename to...'].' "+(fileLoc!="" ? fileLoc : "/"),"");
if (newFileName) {
if (newFileName.substr(0,1)!="/") {newFileName = "/" + newFileName};
newFileName = fileLoc + newFileName;
if (top.ICEcoder.filesFrame.contentWindow.document.getElementById(newFileName.replace(/\\\//g,"|"))) {
overwriteOK = top.ICEcoder.ask("'.$t['That file exists...'].'");
}
};
if ("undefined" == typeof newFileName || (newFileName && "undefined" == typeof overwriteOK) || ("undefined" != typeof overwriteOK && overwriteOK)) {
newFileName = "'.$docRoot.'" + newFileName;
saveURL = "lib/file-control-xhr.php?action=save'.$fileMDTURLPart.'&csrf='.$_GET["csrf"].'";
var xhr = top.ICEcoder.xhrObj();
xhr.onreadystatechange=function() {
if (xhr.readyState==4 && xhr.status==200) {
/* console.log(xhr.responseText); */
var statusObj = JSON.parse(xhr.responseText);
/* Set the actions end time and time taken in JSON object */
statusObj.action.timeEnd = new Date().getTime();
statusObj.action.timeTaken = statusObj.action.timeEnd - statusObj.action.timeStart;
/* console.log(statusObj); */
if (statusObj.status.error) {
top.ICEcoder.message(statusObj.status.errorMsg);
} else {
eval(statusObj.action.doNext);
}
}
};
/* console.log(\'Calling \'+saveURL+\' via XHR\'); */
xhr.open("POST",saveURL,true);
xhr.setRequestHeader(\'Content-type\', \'application/x-www-form-urlencoded\');
xhr.send(\'timeStart='.$_POST["timeStart"].'&file='.$fileURL.'&newFileName=\'+newFileName+\'&contents=\'+top.document.getElementById(\'saveTemp1\').value);
top.ICEcoder.serverMessage("<b>'.$t['Saving'].'</b><br>" + "'.($finalAction == "Save" ? "newFileName" : "'".$fileName."'").'");
} else {
top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);
}';
// ===================
// FILE CONTENT SAVING
// ===================
} elseif (isset($_POST['contents'])) {
$finalAction = isset($_POST["newFileName"]) ? "save as" : "save";
// =================
// FILE IS WRITEABLE
// =================
if (!$demoMode && ((file_exists($file) && is_writable($file)) || isset($_POST['newFileName']) && $_POST['newFileName']!="")) {
$filemtime = $serverType=="Linux" ? filemtime($file) : "1000000";
// =======================
// MDT'S MATCH, WRITE FILE
// =======================
if (!(isset($_GET['fileMDT']))||$filemtime==$_GET['fileMDT']) {
// Newly created files have the perms set too
$setPerms = (!file_exists($file)) ? true : false;
// get old file contents, if file exists, and count stats on usage \n and \r there
// in this case we can keep line endings, which file had before, without
// making code version control systems going crazy about line endings change in whole file.
$oldContents = file_exists($file)?file_get_contents($file):'';
$unixNewLines = preg_match_all('/[^\r][\n]/u', $oldContents);
$windowsNewLines = preg_match_all('/[\r][\n]/u', $oldContents);
$fh = fopen($file, 'w') or die($t['Sorry, cannot save']);
// replace \r\n (Windows), \r (old Mac) and \n (Linux) line endings with whatever we chose to be lineEnding
$contents = $_POST['contents'];
$contents = str_replace("\r\n", $ICEcoder["lineEnding"], $contents);
$contents = str_replace("\r", $ICEcoder["lineEnding"], $contents);
$contents = str_replace("\n", $ICEcoder["lineEnding"], $contents);
if (($unixNewLines > 0) || ($windowsNewLines > 0)){
if ($unixNewLines > $windowsNewLines){
$contents = str_replace($ICEcoder["lineEnding"], "\n", $contents);
} elseif ($windowsNewLines > $unixNewLines){
$contents = str_replace($ICEcoder["lineEnding"], "\r\n", $contents);
}
}
// Now write that content, close the file and clear the statcache
fwrite($fh, $contents);
fclose($fh);
if ($setPerms) {
chmod($file,octdec($ICEcoder['newFilePerms']));
}
clearstatcache();
$filemtime = $serverType=="Linux" ? filemtime($file) : "1000000";
$doNext = 'top.ICEcoder.openFileMDTs[top.ICEcoder.selectedTab-1]="'.$filemtime.'";';
// Reload file manager, rename tab & remove old file highlighting if it was a new file
if (isset($_POST['newFileName']) && $_POST['newFileName']!="") {
$doNext .= 'top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'add\',\''.$fileLoc.'\',\''.$fileName.'\',false,false,false,\'file\');';
$doNext .= 'top.ICEcoder.renameTab(top.ICEcoder.selectedTab,\''.$fileLoc."/".$fileName.'\');';
if (!strpos($_REQUEST['file'],"[NEW]")) {
// We're saving as a new file, so unhighlight the old name in the file manager if visible
$doNext .= "fileLink = top.ICEcoder.filesFrame.contentWindow.document.getElementById('".str_replace("/","|",$fileLoc)."|".basename($_REQUEST['file'])."');";
$doNext .= "if (fileLink) {fileLink.style.backgroundColor = top.ICEcoder.tabBGnormal; fileLink.style.color = top.ICEcoder.tabFGnormalFile};";
}
}
// Reload previewWindow window if not a Markdown file
// In doing this, we check on an interval for the page to be complete and if we last saw it loading
// When we are done loading, so set the loading status to false and load plugins ontop...
$doNext .= 'if (top.ICEcoder.previewWindow.location && top.ICEcoder.previewWindow.location.pathname.indexOf(".md")==-1) {
top.ICEcoder.previewWindowLoading = false;
top.ICEcoder.previewWindow.location.reload(true);
top.ICEcoder.checkPreviewWindowLoadingInt = setInterval(function() {
if (top.ICEcoder.previewWindow.document.readyState != "loading" && top.ICEcoder.previewWindowLoading) {
top.ICEcoder.previewWindowLoading = false;
try {top.ICEcoder.doPesticide();} catch(err) {};
try {top.ICEcoder.doStatsJS(\'save\');} catch(err) {};
clearInterval(top.ICEcoder.checkPreviewWindowLoadingInt);
} else {
top.ICEcoder.previewWindowLoading = top.ICEcoder.previewWindow.document.readyState == "loading" ? true : false;
}
},4);
};';
// Copy over content to diff pane if we have that setting on
$doNext .= '
cM = top.ICEcoder.getcMInstance();
cMdiff = top.ICEcoder.getcMdiffInstance();
if (top.ICEcoder.updateDiffOnSave) {
cMdiff.setValue(cM.getValue());
};
';
// Finally, set previous files, indicate changes, set saved points and redo tabs
$doNext .= '
top.ICEcoder.setPreviousFiles();
setTimeout(function(){top.ICEcoder.indicateChanges()},4);
top.ICEcoder.savedPoints[top.ICEcoder.selectedTab-1] = cM.changeGeneration();
top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);';
// Run our custom processes
include_once("../processes/on-file-save.php");
// ======================================================
// MDT'S DON'T MATCH, OFFER TO LOAD FILE & SHOW DIFF VIEW
// ======================================================
} else {
$loadedFile = toUTF8noBOM(file_get_contents($file,false,$context),true);
$doNext = '
var loadedFile = document.createElement("textarea");
loadedFile.value = "'.str_replace('"','\\\"',str_replace("\r","\\\\r",str_replace("\n","\\\\n",str_replace("</textarea>","<ICEcoder:/:textarea>",$loadedFile)))).'";
var refreshFile = top.ICEcoder.ask("'.$t['Sorry, this file...'].'\\\n'.$file.'\\\n\\\n'.$t['Reload this file...'].'");
if (refreshFile) {
var cM = top.ICEcoder.getcMInstance();
var thisTab = top.ICEcoder.selectedTab;
var userVersionFile = cM.getValue();
/* Revert back to original */
cM.setValue(loadedFile.value);
top.ICEcoder.savedPoints[thisTab-1] = cM.changeGeneration();
top.ICEcoder.openFileMDTs[top.ICEcoder.selectedTab-1] = "'.$filemtime.'";
cM.clearHistory();
/* Now for the new version in the diff pane */
top.ICEcoder.setSplitPane(\'on\');
var cMdiff = top.ICEcoder.getcMdiffInstance();
cMdiff.setValue(userVersionFile);
};';
$finalAction = "nothing";
}
// ===================
// FILE IS UNWRITEABLE
// ===================
} else {
$finalAction = "nothing";
$doNext = "top.ICEcoder.message('".$t['Sorry, cannot save']."\\\\n".$file."');";
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
}
};
// ==========
// NEW FOLDER
// ==========
if (!$error && $_GET['action']=="newFolder") {
if (!$demoMode && is_writable($docRoot.$fileLoc)) {
mkdir($file, octdec($ICEcoder['newDirPerms']));
// Reload file manager
$doNext = 'top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'add\',\''.$fileLoc.'\',\''.$fileName.'\',false,false,false,\'folder\');';
$finalAction = "newFolder";
// Run our custom processes
include_once("../processes/on-new-dir.php");
} else {
$doNext = "top.ICEcoder.message('".$t['Sorry, cannot create...']."\\\\n".$fileLoc."');";
$finalAction = "nothing";
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
};
// ================
// MOVE FILE/FOLDER
// ================
if (!$error && $_GET['action']=="move") {
$moved=false;
$doNext = "";
$srcDir = $docRoot.$iceRoot.str_replace("|","/",strClean($_GET['oldFileName']));
$tgtDir = $docRoot.$fileLoc."/".$fileName;
if ($srcDir != $tgtDir && $fileLoc != "") {
if (!$demoMode && is_writable($srcDir)) {
if(rename($srcDir,$tgtDir)) {
// Reload file manager
$fileOrFolder = is_dir($docRoot.$fileLoc."/".$fileName) ? "folder" : "file";
$doNext .= 'top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'move\',\''.$fileLoc.'\',\''.$fileName.'\',\'\',\''.str_replace($iceRoot,"",strClean(str_replace("|","/",$_GET['oldFileName']))).'\',false,\''.$fileOrFolder.'\');';
$finalAction = "move";
$moved=true;
// Run our custom processes
include_once("../processes/on-file-dir-move.php");
}
}
if (!$moved) {
$doNext .= "top.ICEcoder.message('".$t['Sorry, cannot move']."\\\\n".str_replace("|","/",strClean($_GET['oldFileName']))."\\\\n\\\\n".$t['Maybe public write...']."');";
$finalAction = "nothing";
}
} else {
$finalAction = "nothing";
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
};
// ==================
// RENAME FILE/FOLDER
// ==================
if (!$error && $_GET['action']=="rename") {
$renamed=false;
if (!$demoMode && is_writable($docRoot.$iceRoot.str_replace("|","/",strClean($_GET['oldFileName'])))) {
if(rename($docRoot.$iceRoot.str_replace("|","/",strClean($_GET['oldFileName'])),$docRoot.$fileLoc."/".$fileName)) {
// Reload file manager
$doNext = 'top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'rename\',\''.$fileLoc.'\',\''.$fileName.'\',\'\',\''.str_replace($iceRoot,"",strClean($_GET['oldFileName'])).'\');';
$finalAction = "rename";
$renamed=true;
// Run our custom processes
include_once("../processes/on-file-dir-rename.php");
}
}
if (!$renamed) {
$doNext = "top.ICEcoder.message('".$t['Sorry, cannot rename']."\\\\n".strClean($_GET['oldFileName'])."\\\\n\\\\n".$t['Maybe public write...']."');";
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
};
// =================
// PASTE FILE/FOLDER
// =================
if (!$error && $_GET['action']=="paste") {
$source = $file;
$dest = str_replace("//","/",$docRoot.$iceRoot.strClean(str_replace("|","/",$_GET['location']))."/".basename($source));
if (!$demoMode && is_writable(dirname($dest))) {
if (is_dir($source)) {
$fileOrFolder = "folder";
if (!is_dir($dest)) {
mkdir($dest, octdec($ICEcoder['newDirPerms']));
} else {
for ($i=2; $i<1000000000; $i++) {
if (!is_dir($dest." (".$i.")")) {
$dest = $dest." (".$i.")";
mkdir($dest, octdec($ICEcoder['newDirPerms']));
$i=1000000000;
}
}
}
foreach ($iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST) as $item
) {
if ($item->isDir()) {
mkdir($dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName(), octdec($ICEcoder['newDirPerms']));
} else {
copy($item, $dest.DIRECTORY_SEPARATOR.$iterator->getSubPathName());
}
}
} else {
$fileOrFolder = "file";
if (!file_exists($dest)) {
copy($source, $dest);
} else {
for ($i=2; $i<1000000000; $i++) {
if (!file_exists($dest." (".$i.")")) {
$dest = $dest." (".$i.")";
copy($source, $dest);
$i=1000000000;
}
}
}
}
// Reload file manager
$doNext = 'top.ICEcoder.updateFileManagerList(\'add\',\''.strClean(str_replace("|","/",$_GET['location'])).'\',\''.basename($dest).'\',false,false,false,\''.$fileOrFolder.'\');';
$finalAction = "pasteFile";
// Run our custom processes
include_once("../processes/on-file-dir-paste.php");
} else {
$doNext = "top.ICEcoder.message('".$t['Sorry, cannot copy']." \\\\n".str_replace($docRoot,"",$source)."\\\\n ".$t['into']." \\\\n".str_replace($docRoot,"",$dest)."');";
$finalAction = "nothing";
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
};
// ==============
// UPLOAD FILE(S)
// ==============
if (!$error && $_GET['action']=="upload") {
if (!$demoMode) {
$doNext = "";
class fileUploader {
public function __construct($uploads) {
global $docRoot,$iceRoot,$ICEcoder,$doNext;
$uploadDir=$docRoot.$iceRoot.str_replace("..","",str_replace("|","/",strClean($_POST['folder'])."/"));
foreach($uploads as $current) {
$this->uploadFile=$uploadDir.$current->name;
$fileName = $current->name;
// Get & set existing perms for existing files, or set to newFilePerms setting for new files
if (file_exists($this->uploadFile)) {
$chmodInfo = substr(sprintf('%o', fileperms($this->uploadFile)), -4);
$setPerms = substr($chmodInfo,1,3); // reduces 0755 down to 755
} else {
$setPerms = $ICEcoder['newFilePerms'];
}
if ($this->upload($current,$this->uploadFile,$setPerms)) {
$doNext .= 'top.ICEcoder.updateFileManagerList(\'add\',top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1].replace(/\|/g,\'/\'),\''.str_replace("'","\'",$fileName).'\',false,false,true,\'file\'); top.ICEcoder.serverMessage("'.$t['Uploaded file(s) OK'].'");setTimeout(function(){top.ICEcoder.serverMessage();},2000);';
$finalAction = "upload";
} else {
$doNext .= "top.ICEcoder.message('".$t['Sorry, cannot upload']." \\\\n".$fileName."\\\\n ".$t['into']." \\\\n'+top.ICEcoder.selectedFiles[top.ICEcoder.selectedFiles.length-1].replace(/\|/g,'/'));";
$finalAction = "nothing";
}
}
}
public function upload($current,$uploadFile,$setPerms){
if(move_uploaded_file($current->tmp_name,$uploadFile)){
chmod($uploadFile,octdec($setPerms));
return true;
}
}
}
function getDetails($fileArr) {
foreach($fileArr['name'] as $keyee => $info) {
$uploads[$keyee]->name=$fileArr['name'][$keyee];
$uploads[$keyee]->type=$fileArr['type'][$keyee];
$uploads[$keyee]->tmp_name=$fileArr['tmp_name'][$keyee];
$uploads[$keyee]->error=$fileArr['error'][$keyee];
}
return $uploads;
}
if($_FILES['filesInput']){
$uploads = getDetails($_FILES['filesInput']);
$fileUploader=new fileUploader($uploads);
}
// Run our custom processes
include_once("../processes/on-file-upload.php");
} else {
$doNext .= "top.ICEcoder.message('".$t['Sorry, cannot upload...']."');";
$finalAction = "nothing";
}
$doNext .= "top.ICEcoder.hideFileMenu();top.document.getElementById('fileInput').value='';top.ICEcoder.showHide('hide',top.document.getElementById('loadingMask'));";
// Upload is not handled by XHR methods, but form post, so we need to manually trigger $doNext in a script tag
echo "<script>".$doNext."</script>";
};
// ========================
// DELETE FILE(S)/FOLDER(S)
// ========================
if (!$error && $_GET['action']=="delete") {
$doNext = "";
$filesArray = explode(";",$file); // May contain more than one file here
for ($i=0;$i<count($filesArray);$i++) {
$fullPath = str_replace($docRoot,"",$filesArray[$i]);
$fullPath = str_replace($iceRoot,"",$fullPath);
$fullPath = $docRoot.$iceRoot.$fullPath;
if (rtrim($fullPath,"/") == rtrim($docRoot,"/")) {
$doNext .= "top.ICEcoder.message('".$t['Sorry, cannot delete...']."');";
} else if (!$demoMode && is_writable($fullPath)) {
is_dir($fullPath)
? rrmdir($fullPath)
: unlink($fullPath);
$fileName = basename($fullPath);
$fileLoc = dirname(str_replace($docRoot,"",$fullPath));
if ($fileLoc=="" || $fileLoc=="\\") {$fileLoc="/";};
// Reload file manager
$doNext .= 'top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'delete\',\''.$fileLoc.'\',\''.$fileName.'\');';
$finalAction = "delete";
// Run our custom processes
include_once("../processes/on-file-dir-delete.php");
} else {
$doNext .= "top.ICEcoder.message('".$t['Sorry, cannot delete']."\\\\n".str_replace($docRoot,"",$fullPath)."');";
$finalAction = "nothing";
}
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
};
// The function to recursively remove folders & files
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
filetype($dir."/".$object) == "dir"
? rrmdir($dir."/".$object)
: unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
};
// ======================
// REPLACE TEXT IN A FILE
// ======================
if (!$error && $_GET['action']=="replaceText") {
$doNext = "";
if (!$demoMode && is_writable($file)) {
$loadedFile = toUTF8noBOM(file_get_contents($file,false,$context),true);
$newContent = str_replace(strClean($_GET['find']),strClean($_GET['replace']),$loadedFile);
$fh = fopen($file, 'w') or die($t['Sorry, cannot save']);
fwrite($fh, $newContent);
fclose($fh);
$finalAction = "replaceText";
// Run our custom processes
include_once("../processes/on-file-replace-text.php");
} else {
$doNext .= "top.ICEcoder.message('".$t['Sorry, cannot replace...']."\\\\n".$file."');";
$finalAction = "nothing";
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
};
// ==========================
// GET CONTENTS OF REMOTE URL
// ==========================
if (!$error && $_GET['action']=="getRemoteFile") {
$lineNumber = max(isset($_REQUEST['lineNumber'])?intval($_REQUEST['lineNumber']):1, 1);
$doNext = "";
if ($remoteFile = toUTF8noBOM(file_get_contents($file,false,$context),true)) {
// replace \r\n (Windows), \r (old Mac) and \n (Linux) line endings with whatever we chose to be lineEnding
$remoteFile = str_replace("\r\n", $ICEcoder["lineEnding"], $remoteFile);
$remoteFile = str_replace("\r", $ICEcoder["lineEnding"], $remoteFile);
$remoteFile = str_replace("\n", $ICEcoder["lineEnding"], $remoteFile);
$doNext .= 'top.ICEcoder.newTab();';
$doNext .= 'top.ICEcoder.getcMInstance().setValue(\''.str_replace("\r","",str_replace("\t","\\\\t",str_replace("\n","\\\\n",str_replace("'","\\\\'",str_replace("\\","\\\\",preg_quote($remoteFile)))))).'\');';
$doNext .= 'top.ICEcoder.goToLine('.$lineNumber.');';
$finalAction = "getRemoteFile";
// Run our custom processes
include_once("../processes/on-get-remote-file.php");
} else {
$finalAction = "nothing";
$doNext .= 'top.ICEcoder.message(\''.$t['Sorry, could not...'].' '.$file.'\');';
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
};
// =======================
// CHANGING FILE/DIR PERMS
// =======================
if (!$error && $_GET['action']=="perms") {
if (!$demoMode && is_writable($file)) {
chmod($file,octdec(numClean($_GET['perms'])));
// Reload file manager
$doNext = 'top.ICEcoder.updateFileManagerList(\'chmod\',\''.$fileLoc.'\',\''.$fileName.'\',\''.numClean($_GET['perms']).'\');';
$finalAction = "perms";
// Run our custom processes
include_once("../processes/on-file-dir-perms.php");
} else {
$finalAction = "nothing";
$doNext = "top.ICEcoder.message('".$t['Sorry, cannot change...']." \\n".strClean($file)."');";
}
$doNext .= 'top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);';
}
// ===================
// JSON DATA TO RETURN
// ===================
// No $filemtime yet? Get it now!
if (!isset($filemtime)) {
$filemtime = $serverType=="Linux" ? filemtime($file) : "1000000";
}
// Set $timeStart, use 0 if not available
$timeStart = isset($_POST["timeStart"]) ? $_POST["timeStart"] : 0;
echo '{
"file": {
"absPath": "'.$file.'",
"relPath": "'.$fileLoc.'/'.$fileName.'",
"name": "'.$fileName.'",
"path": "'.dirname($file).'",
"bytes": "'.filesize($file).'",
"modifiedDT": "'.$filemtime.'"
},
"action": {
"initial" : "'.$_GET["action"].'",
"final" : "'.$finalAction.'",
"timeStart": '.$timeStart.',
"timeEnd": 0,
"timeTaken": 0,
"csrf": "'.$_GET["csrf"].'",
"doNext" : "'.preg_replace('/\r|\n/','',str_replace(' ','',str_replace('"','\"',$doNext))).'top.ICEcoder.switchMode();"
},
"status": {
"error" : '.($error ? 'true' : 'false').',
"errorStr" : "'.$errorStr.'",
"errorMsg" : "'.$errorMsg.'"
}
}';
?>

View File

@@ -1,207 +1,116 @@
<?php include("settings.php");?>
<?php
include("headers.php");
include("settings.php");
$t = $text['file-control'];
?>
<?php if ($_SESSION['githubDiff']) { ?>
<script src="github.js?microtime=<?php echo microtime(true);?>"></script>
<script src="underscore-min.js?microtime=<?php echo microtime(true);?>"></script>
<?php ;}; ?>
<script>
<?php
// Get the save type if any
$saveType = "";
if (isset($_GET['saveType'])) {$saveType = strClean($_GET['saveType']);};
$saveType = isset($_GET['saveType']) ? strClean($_GET['saveType']) : "";
// Establish the filename/new filename
$file = str_replace("|","/",strClean(
isset($_POST['newFileName']) && $_POST['newFileName']!=""
? $_POST['newFileName']
: $_GET['file']
: $_REQUEST['file']
));
// Make $file a full path and establish the $fileLoc and $fileName
if (strpos($file,$docRoot)===false) {$file=str_replace("|","/",$docRoot.$iceRoot.$file);};
// Establish the actual name as we may have HTML entities in filename
$file = html_entity_decode($file);
// Put the original $file var aside for use
$fileOrig = $file;
// Trim any +'s or spaces from the end of file
$file = rtrim(rtrim($file,'+'),' ');
// Also remove [NEW] from $file, we can consider $_GET['action'] or $fileOrig to pick that up
$file = rtrim($file,'[NEW]');
// Make each path in $file a full path (; seperated list)
$allFiles = explode(";",$file);
for ($i=0; $i<count($allFiles); $i++) {
if (strpos($allFiles[$i],$docRoot)===false && $_GET['action']!="getRemoteFile") {
$allFiles[$i]=str_replace("|","/",$docRoot.$iceRoot.$allFiles[$i]);
}
};
$file = implode(";",$allFiles);
// Establish the $fileLoc and $fileName (used in single file cases, eg opening. Multiple file cases, eg deleting, is worked out in that loop)
$fileLoc = substr(str_replace($docRoot,"",$file),0,strrpos(str_replace($docRoot,"",$file),"/"));
$fileName = basename($file);
// Check through all files to make sure they're valid/safe
$allFiles = explode(";",$file);
for ($i=0; $i<count($allFiles); $i++) {
// Uncomment to alert and console.log the action and file, useful for debugging
// echo ";alert('".xssClean($_GET['action'],"html")." : ".$allFiles[$i]."');console.log('".xssClean($_GET['action'],"html")." : ".$allFiles[$i]."');";
// Die if the file requested isn't something we expect
if(
// A local folder that isn't the doc root or starts with the doc root
($_GET['action']!="getRemoteFile" &&
rtrim($allFiles[$i],"/") !== rtrim($docRoot,"/") &&
strpos(realpath(rtrim(dirname($allFiles[$i]),"/")),realpath(rtrim($docRoot,"/"))) !== 0
) ||
// Or a remote URL that doesn't start http
($_GET['action']=="getRemoteFile" && strpos($allFiles[$i],"http") !== 0)
) {
die("alert('Sorry! - problem with file requested');</script>");
};
}
// If we're due to open a file...
if ($_GET['action']=="load") {
echo '<script>action="load";</script>';
// Determine what to do based on mime type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (strpos(finfo_file($finfo, $file),"text")===0) {
if (file_exists($file)) {
echo '<script>fileType="text";';
echo 'top.ICEcoder.shortURL = top.ICEcoder.rightClickedFile = top.ICEcoder.thisFileFolderLink = "'.$fileLoc."/".$fileName.'";';
echo '</script>';
$loadedFile = file_get_contents($file);
echo '<textarea name="loadedFile" id="loadedFile">'.str_replace("</textarea>","<ICEcoder:/:textarea>",htmlentities($loadedFile)).'</textarea>';
echo 'action="load";';
$lineNumber = max(isset($_REQUEST['lineNumber'])?intval($_REQUEST['lineNumber']):1, 1);
if (file_exists($file)) {
$finfo = "text";
// Determine what to do based on mime type
if (function_exists('finfo_open')) {
$finfoMIME = finfo_open(FILEINFO_MIME);
$finfo = finfo_file($finfoMIME, $file);
finfo_close($finfoMIME);
} else {
echo '<script>fileType="nothing"; top.ICEcoder.message(\'Sorry, '.$fileLoc."/".$fileName.' doesn\\\'t seem to exist on the server\');</script>';
$fileExt = explode(" ",pathinfo($file, PATHINFO_EXTENSION));
$fileExt = $fileExt[0];
if (array_search($fileExt,array("gif","jpg","jpeg","png"))!==false) {$finfo = "image";};
if (array_search($fileExt,array("doc","docx","ppt","rtf","pdf","zip","tar","gz","swf","asx","asf","midi","mp3","wav","aiff","mov","qt","wmv","mp4","odt","odg","odp"))!==false) {$finfo = "other";};
}
} else if (strpos(finfo_file($finfo, $file),"image")===0) {
echo '<script>fileType="image";fileName=\''.$fileLoc."/".$fileName.'\'</script>';
if (strpos($finfo,"text")===0 || strpos($finfo, "application/xml")===0 || strpos($finfo,"empty")!==false) {
echo 'fileType="text";';
echo 'top.ICEcoder.shortURL = top.ICEcoder.thisFileFolderLink = "'.$fileLoc."/".$fileName.'";';
$loadedFile = toUTF8noBOM(file_get_contents($file,false,$context),true);
echo '</script><textarea name="loadedFile" id="loadedFile">'.htmlentities($loadedFile).'</textarea><script>';
// Run our custom processes
include_once("../processes/on-file-load.php");
} else if (strpos($finfo,"image")===0) {
echo 'fileType="image";fileName=\''.$fileLoc."/".$fileName.'\';';
} else {
echo 'fileType="other";window.open(\'http://'.$_SERVER['SERVER_NAME'].$fileLoc."/".$fileName.'\');';
};
} else {
echo '<script>fileType="other";window.open(\'http://'.$_SERVER['SERVER_NAME'].$fileLoc."/".$fileName.'\');</script>';
};
finfo_close($finfo);
echo 'fileType="nothing"; top.ICEcoder.message(\''.$t['Sorry'].', '.$fileLoc."/".$fileName.' '.$t['does not seem...'].'\');';
}
};
// If we're due to add a new folder...
if ($_GET['action']=="newFolder") {
if (is_writable($docRoot.$fileLoc)) {
mkdir($file, 0705);
// Reload file manager
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'add\',\''.$fileLoc.'\',\''.$fileName.'\');action="newFolder";</script>';
} else {
echo "<script>action='nothing'; top.ICEcoder.message('Sorry, cannot create folder at\\n".$fileLoc."')</script>";
}
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
}
// If we're due to paste a new file...
if ($_GET['action']=="paste") {
$location = $docRoot.strClean(str_replace("|","/",$_GET['location']));
if (is_writable($location)) {
copy($file, $location."/".basename($file));
// Reload file manager
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'add\',\''.str_replace($docRoot,"",$location).'\',\''.$fileName.'\');action="pasteFile";</script>';
} else {
echo "<script>action='nothing'; top.ICEcoder.message('Sorry, cannot copy file into \\n".$location."')</script>";
}
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
}
// If we're due to rename a file/folder...
if ($_GET['action']=="rename") {
if (is_writable($docRoot.$iceRoot.str_replace("|","/",strClean($_GET['oldFileName'])))) {
rename($docRoot.$iceRoot.str_replace("|","/",strClean($_GET['oldFileName'])),$docRoot.$fileLoc."/".$fileName);
// Reload file manager
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'rename\',\''.$fileLoc.'\',\''.$fileName.'\',\'\',\''.str_replace($iceRoot,"",strClean($_GET['oldFileName'])).'\');';
echo 'action="rename";</script>';
} else {
echo "<script>action='nothing'; top.ICEcoder.message('Sorry, cannot rename\\n".strClean($_GET['oldFileName'])."');</script>";
}
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
}
// If we're due to replace text in a file...
if ($_GET['action']=="replaceText") {
if (is_writable(str_replace("|","/",strClean($_GET['fileRef'])))) {
$file = str_replace("|","/",strClean($_GET['fileRef']));
$loadedFile = file_get_contents($file);
$newContent = str_replace(strClean($_GET['find']),strClean($_GET['replace']),$loadedFile);
$fh = fopen($file, 'w') or die("Sorry, cannot save");
fwrite($fh, $newContent);
fclose($fh);
echo '<script>action="replaceText";</script>';
} else {
echo "<script>action='nothing'; top.ICEcoder.message('Sorry, cannot replace text in\\n".strClean($_GET['fileRef'])."');</script>";
}
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
}
// If we're due to change permissions on a file/folder...
if ($_GET['action']=="perms") {
if (is_writable($file)) {
chmod($file,octdec(numClean($_GET['perms'])));
// Reload file manager
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'chmod\',\''.$fileLoc.'\',\''.$fileName.'\',\''.numClean($_GET['perms']).'\');';
echo 'action="perms";</script>';
} else {
echo "<script>action='nothing'; top.ICEcoder.message('Sorry, cannot change permissions on \\n".strClean($file)."');</script>";
}
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
}
// If we're due to delete a file...
if ($_GET['action']=="delete") {
$filesArray = explode(";",$file); // May contain more than one file here
for ($i=0;$i<=count($filesArray)-1;$i++) {
if (is_writable($iceRoot.$filesArray[$i])) {
is_dir($iceRoot.$filesArray[$i])
? rrmdir($iceRoot.$filesArray[$i])
: unlink($iceRoot.$filesArray[$i]);
// Reload file manager
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'delete\',\''.$fileLoc.'\',\''.$fileName.'\');';
echo 'action="delete";</script>';
} else {
echo "<script>top.ICEcoder.message('Sorry can\\'t delete\\n".$filesArray[$i]."');</script>";
}
echo '<script>action="nothing";</script>';
}
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
}
// The function to recursively remove folders & files
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
filetype($dir."/".$object) == "dir"
? rrmdir($dir."/".$object)
: unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
if ($_GET['action']=="save") {
echo '<script>action="save";</script>';
// on the form posting via a reload, save the file
if (isset($_POST['contents'])) {
if ((file_exists($file) && is_writable($file)) || isset($_POST['newFileName']) && $_POST['newFileName']!="") {
if (filemtime($file)==$_GET['fileMDT']||!(isset($_GET['fileMDT']))) {
$fh = fopen($file, 'w') or die("Sorry, cannot save");
fwrite($fh, $_POST['contents']);
fclose($fh);
clearstatcache();
echo '<script>top.ICEcoder.openFileMDTs[top.ICEcoder.selectedTab-1]="'.filemtime($file).'";</script>';
// Reload file manager & rename tab if it was a new file
if (isset($_POST['newFileName']) && $_POST['newFileName']!="") {
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'add\',\''.$fileLoc.'\',\''.$fileName.'\');';
echo 'top.ICEcoder.renameTab(top.ICEcoder.selectedTab,\''.$fileLoc."/".$fileName.'\');</script>';
}
// Reload stickytab window
echo '<script>if (top.ICEcoder.stickyTab.location) {top.ICEcoder.stickyTab.location.reload()};action="doneSave";</script>';
} else {
$loadedFile = file_get_contents($file);
echo '<textarea name="loadedFile" id="loadedFile">'.str_replace("</textarea>","<ICEcoder:/:textarea>",htmlentities($loadedFile)).'</textarea>';
echo '<textarea name="userVersionFile" id="userVersionFile"></textarea>';
?>
<script>
var refreshFile = top.ICEcoder.ask('Sorry, this file has changed, cannot save\n<?php echo $file;?>\n\nReload this file and copy your version to a new document?');
if (refreshFile) {
var cM = top.ICEcoder.getcMInstance();
var thisTab = top.ICEcoder.selectedTab;
document.getElementById('userVersionFile').value = cM.getValue();
// Revert back to original
cM.setValue(document.getElementById('loadedFile').value);
top.ICEcoder.changedContent[thisTab-1] = 0;
top.ICEcoder.openFileMDTs[top.ICEcoder.selectedTab-1] = "<?php echo filemtime($file); ?>";
cM.clearHistory();
// Now for the new file
top.ICEcoder.newTab();
cM = top.ICEcoder.getcMInstance();
cM.setValue(document.getElementById('userVersionFile').value);
cM.clearHistory();
// Finally, switch back to original tab
top.ICEcoder.switchTab(thisTab);
}
action='nothing';
</script>
<?php
}
} else {
echo "<script>action='nothing';top.ICEcoder.message('Sorry, cannot write\\n".$file."')</script>";
}
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
}
};
?>
<script>
if (action=="load") {
if (fileType=="text") {
setTimeout(function() {
if (!top.ICEcoder.content.contentWindow.createNewCMInstance) {
console.log('There was tech hiccup, likely something wasn\'t quite ready. So ICEcoder reloaded it\'s file control again.');
window.location.reload();
console.log('<?php echo $t['There was a...']; ?>');
window.location.reload(true);
<?php
if (file_exists($file)) {
?>
} else {
top.ICEcoder.loadingFile = true;
// Reset the various states back to their initial setting
@@ -213,72 +122,84 @@ if (action=="load") {
top.ICEcoder.setLayout();
top.ICEcoder.content.contentWindow.createNewCMInstance(top.ICEcoder.nextcMInstance);
// Set the value & innerHTML of the code textarea to that of our loaded file plus make it visible (it's hidden on _coder's load)
<?php if ($_SESSION['githubDiff']) { ?>
// If we're in GitHub diff mode and have a split pane display, get the content for the diff pane
if (top.ICEcoder.githubDiff && top.ICEcoder.splitPane) {
<?php
// Get our GitHub relative site path & local path
$ghRemoteURLPos = array_search($ICEcoder["root"],$ICEcoder['githubLocalPaths']);
$ghLocalURLPaths = $ICEcoder['githubLocalPaths'];
$ghLocalPath = $ghLocalURLPaths[$ghRemoteURLPos];
$ghRemoteURLPaths = $ICEcoder['githubRemotePaths'];
$ghRemoteURL = $ghRemoteURLPaths[$ghRemoteURLPos];
$ghRemoteURL = str_replace("https://github.com/","",$ghRemoteURL);
$ghRemoteURL = str_replace("/","|",$ghRemoteURL);
// If the file is not in a sub-sub dir of the doc root
if (!strpos($fileLoc,"/",1)) {
// The file path is simply the file name in the root
$ghFilePath = $fileName;
} else {
// We need to get rid of the root dir and trailing slash
$ghFilePath = substr(str_replace($ghLocalPath,"",$fileLoc),1);
// If it's not within a sub-dir, it's just the filename, otherwise prefix with dir path and pipe
$ghFilePath = $ghFilePath == "" ? $fileName : $ghFilePath."|".$fileName;
}
?>
top.ICEcoder.filesFrame.contentWindow.frames['processControl'].location.href = "github.php?action=read&repo=<?php echo $ghRemoteURL;?>&filePath=<?php echo $ghFilePath;?>&csrf="+top.ICEcoder.csrf;
}
<?php ;}; ?>
// Set the value & innerHTML of the code textarea to that of our loaded file plus make it visible (it's hidden on ICEcoder's load)
top.ICEcoder.switchMode();
cM = top.ICEcoder.getcMInstance();
cM.setValue(document.getElementById('loadedFile').value);
top.ICEcoder.savedPoints[top.ICEcoder.selectedTab-1] = cM.changeGeneration();
top.document.getElementById('content').style.visibility='visible';
top.ICEcoder.switchTab(top.ICEcoder.selectedTab);
cM.focus();
top.ICEcoder.switchTab(top.ICEcoder.selectedTab,'noFocus');
setTimeout(function(){top.ICEcoder.filesFrame.contentWindow.focus();},0);
// Then clean it up, set the text cursor, update the display and get the character data
top.ICEcoder.contentCleanUp();
top.ICEcoder.content.contentWindow['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab], null);
top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab] = top.ICEcoder.content.contentWindow['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(0, "cm-s-activeLine");
top.ICEcoder.content.contentWindow['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].removeLineClass(top.ICEcoder['cMActiveLinecM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]], "background");
top.ICEcoder['cMActiveLinecM'+top.ICEcoder.selectedTab] = top.ICEcoder.content.contentWindow['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].addLineClass(0, "background", "cm-s-activeLine");
top.ICEcoder.nextcMInstance++;
top.ICEcoder.openFileMDTs.push('<?php echo filemtime($file); ?>');
top.ICEcoder.openFileMDTs.push('<?php echo $serverType=="Linux" ? filemtime($file) : "1000000"; ?>');
for (var i=0; i<cM.lineCount(); i++) {
top.ICEcoder.content.contentWindow.CodeMirror.doFold(cM.getLine(i).indexOf("{")>-1?"brace":"xml",null,"+","-",true)(cM, i);
}
top.ICEcoder.goToLine(<?php echo $lineNumber; ?>);
top.ICEcoder.loadingFile = false;
<?php
;};
?>
}
},4);
}
if (fileType=="image") {
top.document.getElementById('blackMask').style.visibility = "visible";
top.document.getElementById('mediaContainer').innerHTML = "<img src=\"<?php echo $fileLoc."/".$fileName;?>\" class=\"whiteGlow\" style=\"border: solid 10px #fff; max-width: 700px; max-height: 500px\" onClick=\"return false\"><br><span class=\"whiteGlow\" style=\"border: solid 10px #fff; color: #000; background-color: #fff\" onClick=\"return false\"><?php echo $fileLoc."/".$fileName;?></span>";
top.document.getElementById('mediaContainer').innerHTML =
"<canvas id=\"canvasPicker\" width=\"1\" height=\"1\" style=\"position: absolute; margin: 10px 0 0 10px; cursor: crosshair\" onmouseover=\"top.ICEcoder.overPopup=true\" onmouseout=\"top.ICEcoder.overPopup=false\"></canvas>" +
"<img src=\"<?php echo $fileLoc."/".$fileName;?>\" class=\"whiteGlow\" style=\"border: solid 10px #fff; max-width: 700px; max-height: 500px; background-color: #000; background-image: url('images/checkerboard.png')\" onLoad=\"reducedImgMsg = (this.naturalWidth > 700 || this.naturalHeight > 500) ? ', <?php echo $t['displayed at']; ?> ' + this.width + ' x ' + this.height : ''; document.getElementById('imgInfo').innerHTML += ' (' + this.naturalWidth + ' x ' + this.naturalHeight + reducedImgMsg + ')'; top.ICEcoder.initCanvasImage(this); top.ICEcoder.interactCanvasImage(this)\"><br>" +
"<div class=\"whiteGlow\" style=\"display: inline-block; margin-top: -10px; border: solid 10px #fff; color: #000; background-color: #fff\" id=\"imgInfo\" onmouseover=\"top.ICEcoder.overPopup=true\" onmouseout=\"top.ICEcoder.overPopup=false\">" +
"<b><?php echo $fileLoc."/".$fileName;?></b>" +
"</div><br>" +
"<input type=\"text\" id=\"hexMouseXY\" style=\"border: 1px solid #888; border-right: 0; width: 70px\" onmouseover=\"top.ICEcoder.overPopup=true\" onmouseout=\"top.ICEcoder.overPopup=false\"></input>" +
"<input type=\"text\" id=\"rgbMouseXY\" style=\"border: 1px solid #888; margin-right: 10px; width: 70px\" onmouseover=\"top.ICEcoder.overPopup=true\" onmouseout=\"top.ICEcoder.overPopup=false\"></input>" +
"<input type=\"text\" id=\"hex\" style=\"border: 1px solid #888; border-right: 0; width: 70px\" onmouseover=\"top.ICEcoder.overPopup=true\" onmouseout=\"top.ICEcoder.overPopup=false\"></input>" +
"<input type=\"text\" id=\"rgb\" style=\"border: 1px solid #888; width: 70px\" onmouseover=\"top.ICEcoder.overPopup=true\" onmouseout=\"top.ICEcoder.overPopup=false\"></input>";
top.document.getElementById('floatingContainer').style.background = "#fff url('<?php echo $fileLoc."/".$fileName;?>') no-repeat 0 0";
}
top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);
}
</script>
<form name="saveFile" action="file-control.php?action=save&file=<?php if (isset($file)) {echo $file;}; if (isset($_GET['fileMDT']) && $_GET['fileMDT']!="undefined") {echo "&fileMDT=".numClean($_GET['fileMDT']);};?>" method="POST">
<textarea name="contents"></textarea>
<input type="hidden" name="newFileName" value="">
</form>
<script>
if (action=="save") {
<?php
if (strpos($file,"[NEW]")>0||$saveType=="saveAs") {
if (strpos($fileName,"[NEW]")>0) {echo "fileLoc = '".$fileLoc."';";} else {echo "fileLoc = '';";};
?>
newFileName = top.ICEcoder.getInput(fileLoc != ""
? 'Enter filename to save at '+fileLoc
: 'Enter filename (including path, prefixed with /)'
,'');
if (newFileName.substr(0,1)!="/") {newFileName = "/" + newFileName}
if (newFileName) {
newFileName = fileLoc == "" ? newFileName : fileLoc + "/" + fileName;
}
if (newFileName && top.document.getElementById('filesFrame').contentWindow.document.getElementById(newFileName.replace(/\//g,"|"))) {
overwriteOK = top.ICEcoder.ask('That file exists already, overwrite?');
}
document.saveFile.newFileName.value = '<?php echo $docRoot; ?>' + newFileName;
<?php ;};?>
if ("undefined" == typeof newFileName || (newFileName && "undefined" == typeof overwriteOK) || ("undefined" != typeof overwriteOK && overwriteOK)) {
top.ICEcoder.serverMessage('<b>Saving</b><br>'+ <?php echo strpos($file,"[NEW]")>0 ? "newFileName" : "'$file'"; ?>);
document.saveFile.contents.value = top.document.getElementById('saveTemp1').value;
document.saveFile.submit();
} else {
top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);
action=="nothing";
}
}
</script>
<script>
if (action=="doneSave") {
top.ICEcoder.changedContent[top.ICEcoder.selectedTab-1] = 0;
top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);
}
// Finally, switch mode in case we have saved, renamed file etc
top.ICEcoder.switchMode();
</script>

29
lib/file-type-icons.css Normal file
View File

@@ -0,0 +1,29 @@
/* Additional file types */
.fileManager LI.ext-c:before {background-position: -48px 0}
.fileManager LI.ext-cpp:before, .fileManager LI.ext-ino:before {background-position: -64px 0}
.fileManager LI.ext-cs:before {background-position: -80px 0}
.fileManager LI.ext-coffee:before {background-position: -96px 0}
.fileManager LI.ext-css:before {background-position: -112px 0}
.fileManager LI.ext-erl:before {background-position: -128px 0}
.fileManager LI.ext-gif:before {background-position: -144px 0}
.fileManager LI.ext-go:before {background-position: -160px 0}
.fileManager LI.ext-htm:before, .fileManager LI.ext-html:before {background-position: -176px 0}
.fileManager LI.ext-jpg:before, .fileManager LI.ext-jpeg:before {background-position: -192px 0}
.fileManager LI.ext-java:before {background-position: -208px 0}
.fileManager LI.ext-js:before, .fileManager LI.ext-json:before {background-position: -224px 0}
.fileManager LI.ext-jl:before {background-position: -240px 0}
.fileManager LI.ext-less:before {background-position: -256px 0}
.fileManager LI.ext-lua:before {background-position: -272px 0}
.fileManager LI.ext-md:before {background-position: -288px 0}
.fileManager LI.ext-pl:before {background-position: -304px 0}
.fileManager LI.ext-php:before {background-position: -320px 0}
.fileManager LI.ext-png:before {background-position: -336px 0}
.fileManager LI.ext-py:before {background-position: -352px 0}
.fileManager LI.ext-rb:before, .fileManager LI.ext-ruby:before {background-position: -368px 0}
.fileManager LI.ext-rs:before {background-position: -384px 0}
.fileManager LI.ext-scss:before {background-position: -400px 0}
.fileManager LI.ext-sql:before {background-position: -416px 0}
.fileManager LI.ext-txt:before {background-position: -432px 0}
.fileManager LI.ext-xml:before {background-position: -448px 0}
.fileManager LI.ext-yaml:before {background-position: -464px 0}
.fileManager LI.ext-zip:before {background-position: -480px 0}

25
lib/file-types.css Normal file
View File

@@ -0,0 +1,25 @@
.fileManager {
margin: 0 0 15px 20px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.fileManager span {font-family: helvetica, arial, swiss, verdana; padding: 1px 3px; border-radius: 3px}
.fileManager a {color: #eee; text-decoration: none; cursor: pointer}
.fileManager .pft-directory, .fileManager .pft-file {list-style-image: url(../images/blank.gif)}
.fileManager ul, .fileManager li {margin-left: 15px}
/* Default file */
.fileManager LI.pft-directory:before, .fileManager LI.pft-file:before {
position: absolute; display: block; width: 16px; height: 16px; content: ""; margin-top: -2px; margin-left: -20px; background:url(../images/file-folder-icons.png) no-repeat 0 0;
}
.fileManager LI.dirOpen:before {background-position: -16px 0}
@media screen and (-webkit-min-device-pixel-ratio:0) { /* hacked for chrome and safari */
.fileManager LI.pft-directory:before, .fileManager LI.pft-file:before {
margin-top: -19px;
}
}
.fileManager LI.pft-file:before {background-position: -32px 0}

View File

@@ -17,46 +17,21 @@ table, caption, tbody, tfoot, thead, tr, th, td {
vertical-align: top;
}
body {margin: 0; overflow: auto}
.refresh {position: fixed; display: inline-block; width: 14px; height: 14px; background: url('../images/file-manager-icons.png') -100px -16px no-repeat; right: 0; margin-right: 15px; cursor: pointer}
.fileManager {
margin: 15px 0 15px 22px;
body {margin: 0; overflow: auto;
-webkit-user-select: none;
-moz-user-select: none;
-o-user-select: none;
-ms-user-select: none;
user-select: none;
}
.fileManager span {font-family: helvetica, arial, swiss, verdana}
.fileManager a {color: #eee; text-decoration: none; cursor: pointer}
.fileManager .pft-directory, .fileManager .pft-file {list-style-image: url(../images/blank.gif)}
.fileManager ul, .fileManager li {margin-left: 15px}
/* Default file */
.fileManager LI.pft-directory:before, .fileManager LI.pft-file:before {
position: absolute; display: block; width: 16px; height: 16px; content: ""; margin-top: -2px; margin-left: -23px; background:url(../images/file-folder-icons.png) no-repeat 0 0;
}
.fileManager LI.dirOpen:before {background-position: -16px 0}
@media screen and (-webkit-min-device-pixel-ratio:0) { /* hacked for chrome and safari */
.fileManager LI.pft-directory:before, .fileManager LI.pft-file:before {
margin-top: -19px;
}
}
.fileManager LI.pft-file:before {background-position: -32px 0}
/* Additional file types */
.fileManager LI.ext-coffee:before {background-position: -48px 0}
.fileManager LI.ext-css:before {background-position: -64px 0}
.fileManager LI.ext-gif:before {background-position: -80px 0}
.fileManager LI.ext-htm:before, .fileManager LI.ext-html:before {background-position: -96px 0}
.fileManager LI.ext-jpg:before, .fileManager LI.ext-jpeg:before {background-position: -112px 0}
.fileManager LI.ext-js:before {background-position: -128px 0}
.fileManager LI.ext-less:before {background-position: -144px 0}
.fileManager LI.ext-php:before {background-position: -160px 0}
.fileManager LI.ext-png:before {background-position: -176px 0}
.fileManager LI.ext-rb:before, .fileManager LI.ext-ruby:before {background-position: -192px 0}
.fileManager LI.ext-txt:before {background-position: -208px 0}
.fileManager LI.ext-zip:before {background-position: -224px 0}
.lock {position: fixed; display: inline-block; width: 12px; height: 16px; background: url('../images/file-manager-icons.png') 0 0 no-repeat; right: 0; margin-right: 16px; top: 0; cursor: pointer}
.refresh {position: fixed; display: inline-block; width: 14px; height: 14px; background: url('../images/file-manager-icons.png') -32px 0 no-repeat; right: 0; margin-right: 15px; top: 25px; cursor: pointer}
.plugins {position: fixed; display: inline-block; width: 16px; height: 16px; background: url('../images/file-manager-icons.png') -64px 0 no-repeat; right: 0; margin-right: 15px; top: 47px; cursor: pointer}
.githubOn {position: fixed; display: inline-block; width: 14px; height: 14px; background: url('../images/file-manager-icons.png') -80px 0 no-repeat; right: 0; margin-right: 15px; top: 72px; cursor: pointer}
.githubOff {position: fixed; display: inline-block; width: 14px; height: 14px; background: url('../images/file-manager-icons.png') -96px 0 no-repeat; right: 0; margin-right: 15px; top: 72px; cursor: pointer}
.fmDragBox {position: absolute; display: inline-block; width: 0; height: 0; top: 0; left: 0; background: rgba(0,198,255,0.3);
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}

55
lib/foldcode.js Normal file
View File

@@ -0,0 +1,55 @@
// Modified version of CodeMirror's codefold.js to show guttermarkers
CodeMirror.doFold = function(foldType, widget, markOn, markOff, dontCollapse) {
if (widget == null) widget = "\u2194";
if (typeof widget == "string") {
var text = document.createTextNode(widget);
widget = document.createElement("span");
widget.appendChild(text);
widget.className = "CodeMirror-foldmarker";
}
if (markOn == null) markOn = "+";
if (typeof markOn == "string") {
var text = document.createTextNode(markOn);
markOn = document.createElement("span");
markOn.appendChild(text);
markOn.className = "fold foldOn";
}
if (markOff == null) markOff = "-";
if (typeof markOff == "string") {
var text = document.createTextNode(markOff);
markOff = document.createElement("span");
markOff.appendChild(text);
markOff.className = "fold foldOff";
}
return function(cm, pos) {
if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0);
var range = CodeMirror.fold[foldType](cm, pos);
foldable = range && (range.from.line != range.to.line || range.from.ch != range.to.ch) ? true : false;
if (!foldable) cm.setGutterMarker(pos.line, "folds", null);
if (!range) return;
var present = cm.findMarksAt(range.from), cleared = 0;
for (var i = 0; i < present.length; ++i) {
if (present[i].__isFold) {
++cleared;
present[i].clear();
}
}
if (foldable) {
cm.setGutterMarker(pos.line, "folds", cleared || dontCollapse ? markOff.cloneNode(true) : markOn.cloneNode(true));
}
if (cleared || dontCollapse) return;
var myWidget = widget.cloneNode(true);
CodeMirror.on(myWidget, "mousedown", function() {myRange.clear();cm.setGutterMarker(pos.line, "folds", markOff.cloneNode(true));});
var myRange = cm.markText(range.from, range.to, {
replacedWith: myWidget,
clearOnEnter: true,
__isFold: true
});
};
};

430
lib/get-branch.php Normal file
View File

@@ -0,0 +1,430 @@
<?php
if (!isset($ICEcoder['root'])) {
include("headers.php");
include("settings.php");
}
if (!$_SESSION['loggedIn']) {
header("Location: ../");
die();
}
$text = $_SESSION['text'];
$t = $text['get-branch'];
?>
<!DOCTYPE html>
<html>
<head>
<title>ICEcoder v <?php echo $ICEcoder["versionNo"];?> get branch</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex, nofollow">
<?php if ($_SESSION['githubDiff']) { ?>
<script src="github.js?microtime=<?php echo microtime(true);?>"></script>
<?php ;}; ?>
</head>
<body>
<?php
// Need to get dir contents recursively? (Used by GitHub diff mode)
if ($_SESSION['githubDiff']) {
// Function to sort given values alphabetically
function alphasort($a, $b) {
return strcmp($a->getPathname(), $b->getPathname());
}
// Class to put forward the values for sorting
class SortingIterator implements IteratorAggregate {
private $iterator = null;
public function __construct(Traversable $iterator, $callback) {
$array = iterator_to_array($iterator);
usort($array, $callback);
$this->iterator = new ArrayIterator($array);
}
public function getIterator() {
return $this->iterator;
}
}
// Get a full list of dirs & files and begin sorting using above class & function
$path = $docRoot.$iceRoot;
$objectList = new SortingIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST), 'alphasort');
// Iterator to get files
$iter = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST,
RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied"
);
// Check if dir has .gitignore file
function hasGitignore($dir) {
return is_file("$dir/.gitignore");
}
// Get a list of .gitignore files into $gi array
$gi = array();
if(hasGitignore($path)) {
$gi[] = "$path/.gitignore";
}
foreach ($iter as $scanpath) {
if (is_dir($scanpath) && strpos($scanpath,".git") == false) {
$thisDir = str_replace("\\","/",$scanpath);
if(hasGitignore($thisDir)) {
$gi[] = $thisDir."/.gitignore";
}
}
}
// Get $matches array containing existing files listed in .gitignore
function parseGitignore($file) { # $file = '/absolute/path/to/.gitignore'
$dir = dirname($file);
$matches = array();
$lines = file($file);
foreach ($lines as $line) {
$line = trim($line);
if ($line === '') continue; # empty line
if (substr($line, 0, 1) == '#') continue; # a comment
if (substr($line, 0, 1) == '!') { # negated glob
$line = substr($line, 1);
$files = array_diff(glob("$dir/*"), glob("$dir/$line"));
} else { # normal glob
$files = glob("$dir/$line");
}
$matches = array_merge($matches, $files);
}
return $matches;
}
// Cycle through all .gitignore files running above function to get a list of $excluded files
// Exclude the .git dir as first item as we don't want to see that
$excluded = array("/.git");
foreach ($gi as $scanpath) {
$excludedTest = (parseGitignore($scanpath));
if (count($excludedTest) > 0) {
$excluded = array_merge($excluded, $excludedTest);
}
}
$objectListArray = array();
foreach ($objectList as $objectRef) {
$fileFolderName = @ltrim(substr(str_replace("\\","/",$objectRef->getPathname()), strlen($path)),"/");
array_push($objectListArray,$fileFolderName);
}
}
// If we're just getting a branch, get that and set as the finalArray
$scanDir = $docRoot.$iceRoot;
$location = "";
echo '<div id="branch" style="display: none">';
$location = str_replace("|","/",$_GET['location']);
if ($location=="/") {$location = "";};
$dirArray = $filesArray = $finalArray = array();
$finalArray = scanDir($scanDir.$location);
foreach($finalArray as $entry) {
$canAdd = true;
for ($i=0;$i<count($_SESSION['bannedFiles']);$i++) {
if($_SESSION['bannedFiles'][$i] != "" && strpos($entry,$_SESSION['bannedFiles'][$i])!==false) {$canAdd = false;}
}
if ($docRoot.$iceRoot.$location."/".$entry == $docRoot.$ICEcoderDir) {
$canAdd = false;
}
if ($entry != "." && $entry != ".." && $canAdd) {
is_dir($docRoot.$iceRoot.$location."/".$entry)
? array_push($dirArray,$location."/".$entry)
: array_push($filesArray,$location."/".$entry);
}
}
natcasesort($dirArray);
natcasesort($filesArray);
$finalArray = array_merge($dirArray,$filesArray);
for ($i=0;$i<count($finalArray);$i++) {
$fileFolderName = str_replace("\\","/",$finalArray[$i]);
$type = is_dir($docRoot.$iceRoot.$fileFolderName) ? "folder" : "file";
if ($type=="file") {
// Get extension (prefix 'ext-' to prevent invalid classes from extensions that begin with numbers)
$ext = "ext-".pathinfo($docRoot.$iceRoot.$fileFolderName, PATHINFO_EXTENSION);
}
if ($i==0) {echo "<ul style=\"display: block\">\n";}
if ($i==count($finalArray)-1 && isset($_GET['location'])) {
echo "</ul>\n";
}
$type == "folder" ? $class = 'pft-directory' : $class = 'pft-file '.strtolower($ext);
$loadParam = $type == "folder" ? "true" : "false";
echo "<li class=\"".$class."\" draggable=\"false\" ondrag=\"top.ICEcoder.draggingWithKeyTest(event);if(top.ICEcoder.getcMInstance()){top.ICEcoder.editorFocusInstance.indexOf('diff') == -1 ? top.ICEcoder.getcMInstance().focus() : top.ICEcoder.getcMdiffInstance().focus()}\" ondragend=\"top.ICEcoder.dropFile(this)\"><a nohref title=\"$fileFolderName\" onMouseOver=\"parentNode.draggable=true;top.ICEcoder.overFileFolder('$type',this.childNodes[1].id)\" onMouseOut=\"parentNode.draggable=false;top.ICEcoder.overFileFolder('$type','')\" ".
(($type == "folder")?"ondragover=\"if(parentNode.nextSibling && parentNode.nextSibling.tagName != 'UL' && top.ICEcoder.thisFileFolderLink != this.childNodes[1].id) {top.ICEcoder.openCloseDir(this,true);}\"":"").
" onClick=\"if(!event.ctrlKey && !top.ICEcoder.cmdKey) {".
(($type == "folder")?" top.ICEcoder.openCloseDir(this,$loadParam);":"").
" if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {top.ICEcoder.openFile()}}\" style=\"position: relative; left:-22px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span id=\"".str_replace($docRoot,"",str_replace("/","|",$fileFolderName))."\">".xssClean(basename($fileFolderName),"html")."</span> ";
$thisPermVal = $serverType=="Linux" ? substr(sprintf('%o', fileperms($docRoot.$iceRoot.$fileFolderName)), -3) : '';
$permColors = $thisPermVal == 777 ? 'background: #800; color: #eee' : 'color: #888';
echo '<span style="'.$permColors.'; font-size: 8px" id="'.str_replace($docRoot,"",str_replace("/","|",$fileFolderName)).'_perms">';
echo $thisPermVal;
echo "</span></a></li>\n";
}
echo ' </div>';
if ($_SESSION['githubDiff']) {
// Show the loading screen until we're done comparing files with GitHub
echo "<script>setTimeout(function(){top.ICEcoder.showHide('show',top.get('loadingMask'));},4)</script>";
$i=0;
$dirListArray = $dirSHAArray = $dirTypeArray = array();
// For each of the files in our local path...
for ($i=0; $i<count($objectListArray); $i++) {
$fileFolderName = "/".$objectListArray[$i];
// If we're not looking at a .git dir, it's not a .gitignore excluded path and not a dir
if (strpos($fileFolderName,".git/") == false && !in_array($docRoot.$iceRoot.$fileFolderName, $excluded) && !is_dir($docRoot.$iceRoot.$fileFolderName)) {
// Get contents of file
$contents = file_get_contents($docRoot.$iceRoot.$fileFolderName);
$finfo = "text";
// Determine if we should remove \r line endings based on mime type (text files yes, others no)
if (function_exists('finfo_open')) {
$finfoMIME = finfo_open(FILEINFO_MIME);
$finfo = finfo_file($finfoMIME, $docRoot.$iceRoot.$fileFolderName);
finfo_close($finfoMIME);
} else {
$fileExt = explode(" ",pathinfo($docRoot.$iceRoot.$fileFolderName, PATHINFO_EXTENSION));
$fileExt = $fileExt[0];
if (array_search($fileExt,array("gif","jpg","jpeg","png"))!==false) {$finfo = "image";};
if (array_search($fileExt,array("doc","docx","ppt","rtf","pdf","zip","tar","gz","swf","asx","asf","midi","mp3","wav","aiff","mov","qt","wmv","mp4","odt","odg","odp"))!==false) {$finfo = "other";};
}
if (strpos($finfo,"text")===0 || strpos($finfo, "application/xml")===0 || strpos($finfo,"empty")!==false) {
$contents = str_replace("\r","",$contents);
};
// Establish the blob SHA contents and push name, SHA and type into 3 arrays
$store = "blob ".strlen($contents)."\000".$contents;
array_push($dirListArray,ltrim($fileFolderName,"/"));
array_push($dirSHAArray,sha1($store));
array_push($dirTypeArray,"file");
}
}
// Get our GitHub relative site path
$ghRemoteURLPos = array_search($ICEcoder["root"],$ICEcoder['githubLocalPaths']);
$ghRemoteURLPaths = $ICEcoder['githubRemotePaths'];
$ghRemoteURL = $ghRemoteURLPaths[$ghRemoteURLPos];
$ghRemoteURL = str_replace("https://github.com/","",$ghRemoteURL);
// Reduce absolute excluded paths to relative
for ($i=0; $i<count($excluded); $i++) {
$excluded[$i] = str_replace($docRoot.$iceRoot,"",$excluded[$i]);
}
?>
<script>
top.repo = '<?php echo $ghRemoteURL;?>';
top.path = '<?php echo $path;?>';
dirListArray = [<?php echo "'".implode("','", $dirListArray)."'";?>];
dirSHAArray = [<?php echo "'".implode("','", $dirSHAArray)."'";?>];
dirTypeArray = [<?php echo "'".implode("','", $dirTypeArray)."'";?>];
excludedArray = [<?php echo "'".implode("','", $excluded)."'";?>];
// Start our github object
var github = new Github({token: "<?php echo $_SESSION['githubAuthToken'];?>", auth: "oauth"});
repoListArray = [];
repoSHAArray = [];
// Set our repo and get the tree recursively
var repo = github.getRepo(top.repo.split("/")[0], top.repo.split("/")[1]);
repo.getTree('master?recursive=true', function(err, tree) {
if(!err) {
top.treePaths = [];
top.diffPaths = [];
top.deletedPaths = [];
// ==========================================================
// NEW FILES are not compared for diffs in this loop, so kept
// ==========================================================
for (var i=0; i<tree.length; i++) {
// compare files (when tree types are blobs)
if (tree[i].type == "blob") {
// ===========================
// UNCHANGED FILES are removed
// ===========================
if (tree[i].sha == dirSHAArray[dirListArray.indexOf(tree[i].path)]) {
if (document.getElementById("|"+tree[i].path.replace("/","|")+"_perms")) {
thatNode = document.getElementById("|"+tree[i].path.replace("/","|")+"_perms").parentNode.parentNode;
thatNode.parentNode.removeChild(thatNode);
}
} else {
// ======================
// CHANGED FILES are kept
// ======================
if ("undefined" != typeof dirSHAArray[dirListArray.indexOf(tree[i].path)]) {
top.diffPaths.push(tree[i].path);
// ======================
// DELETED FILES are kept
// ======================
} else {
top.deletedPaths.push(tree[i].path);
}
}
} else {
top.treePaths.push(tree[i].path);
}
}
// Now we are only showing new, changed and deleted files from our GitHub tree list
// in short, we have removed unchanged files from what would be visible
// However, we should now consider dirs that the user hasn't opened yet as we can
// maybe remove closed dirs that contain no changes
for (var i=0; i<top.treePaths.length; i++) {
canShowDir = false;
for (j=0; j<top.diffPaths.length; j++) {
if (top.diffPaths[j].indexOf(top.treePaths[i]+"/") === 0) {
canShowDir = true;
}
}
// Remove dirs that contain no changes in them
if (!canShowDir) {
if (document.getElementById("|"+top.treePaths[i].replace("/","|")+"_perms")) {
thatNode = document.getElementById("|"+top.treePaths[i].replace("/","|")+"_perms").parentNode.parentNode;
thatNode.parentNode.removeChild(thatNode);
}
}
}
// Finally, remove any excluded files as specified in the .gitignore file
for (var i=0; i<excludedArray.length; i++) {
if (document.getElementById(excludedArray[i].replace(/\//g,"|")+"_perms")) {
thatNode = document.getElementById(excludedArray[i].replace(/\//g,"|")+"_perms").parentNode.parentNode;
thatNode.parentNode.removeChild(thatNode);
}
}
// With everything done, we can now set folderContent, animate those into view and when done, hide the loading screen
setTimeout(function(){
folderContent = document.getElementById('branch').innerHTML;
showFiles();
// If there are no diffs, ask user if they want to switch back to regular mode
setTimeout(function(){
if (parent.document.getElementById('|').parentNode.parentNode.parentNode.childNodes[2].childNodes.length==1) {
if(top.ICEcoder.ask('<?php echo $t['There are no...'];?>')) {
top.ICEcoder.githubDiffToggle();
} else {
top.ICEcoder.showHide('hide',top.get('loadingMask'));
}
} else {
top.ICEcoder.showHide('hide',top.get('loadingMask'));
}
},100);
},4);
} else {
// There was an error, display HTTP error code and response message
top.ICEcoder.message('<?php echo $t['Sorry, there was...'];?> '+err.error+'\n\n'+err.request.response);
top.ICEcoder.showHide('hide',top.get('loadingMask'));
}
});
</script>
<?php
}
?>
<script>
targetElem = top.ICEcoder.filesFrame.contentWindow.document.getElementById('<?php echo $_GET['location'];?>');
newUL = document.createElement("ul");
newUL.style = "display: block";
locNest = targetElem.parentNode.parentNode;
if(locNest.nextSibling && locNest.nextSibling.tagName=="UL") {
x = locNest.nextSibling;
x.parentNode.removeChild(x);
}
folderContent = document.getElementById('branch').innerHTML;
folderItems = folderContent.split("\n");
showFiles = function() {
// Now display folders & files
// Animate into view?
if (folderItems.length <= 50) {
showFileI=0;
animFolders = setInterval(function() {
showFileI++;
showNextFile('progressive');
},4);
// Display immediately
} else {
showFileJ = folderItems.length;
showContent = folderContent;
showNextFile();
}
}
showNextFile = function(progressive) {
if (progressive) {
showContent = "";
for (showFileJ=0; showFileJ<=showFileI; showFileJ++) {
showContent += folderItems[showFileJ];
if (showFileJ<showFileI) {showContent += "\n";};
}
}
showContent = showContent.slice(28);
if (showFileJ==folderItems.length) {
// If we've been animating into view, clear that interval
if ("undefined" != typeof animFolders) {clearInterval(animFolders);};
showContent = showContent.slice(0,-2);
// If we've got some deleted files (as we're in GitHub diff mode), add those into the file manager
if ("undefined" != typeof top.deletedPaths && top.deletedPaths.length > 0) {
i = 0;
top.addDeletedFiles = setInterval(function() {
fSplit = top.deletedPaths[i].lastIndexOf("/");
thePath = top.deletedPaths[i].substr(0,fSplit);
theFile = top.deletedPaths[i].substr(fSplit+1);
// If it's not excluded
if ("undefined" != typeof excludedArray && excludedArray.indexOf((thePath == "" ? "" : "/" + thePath)+"/"+theFile) == -1) {
// If we're adding a deleted dir/file in a sub-dir
if ("<?php echo $location;?>" == "/"+thePath) {
top.ICEcoder.updateFileManagerList('add','/'+thePath,theFile,false,false,false,'file');
// If we're adding a deleted dir/file at the root level
} else {
// Folder
if (thePath != "") {
top.ICEcoder.updateFileManagerList('add',top.iceRoot,thePath,false,false,false,'folder');
// File
} else {
top.ICEcoder.updateFileManagerList('add',top.iceRoot+thePath,theFile,false,false,false,'file');
}
}
}
i++;
if ("undefined" == typeof top.deletedPaths[i]) {
clearInterval(top.addDeletedFiles);
}
},20);
}
setTimeout(function(){top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);},4);
if (!top.ICEcoder.fmReady) {top.ICEcoder.fmReady=true;};
}
newUL.innerHTML = showContent;
locNest.parentNode.insertBefore(newUL,locNest.nextSibling);
}
// If we're not in githubDiff mode, show files here
if (folderContent.indexOf('<ul')>-1 || folderContent.indexOf('<li')>-1) {
<?php if (!$_SESSION['githubDiff']) {echo 'showFiles();';};?>
} else {
<?php
$iceGithubLocalPaths = $ICEcoder["githubLocalPaths"];
$iceGithubRemotePaths = $ICEcoder["githubRemotePaths"];
$pathPos = array_search($iceRoot,$iceGithubLocalPaths);
if ($pathPos !== false) {
?>
if (top.ICEcoder.ask("<?php echo $t['Your local folder...'];?> <?php echo $iceGithubRemotePaths[$pathPos];?>?")) {
setTimeout(function() {
top.ICEcoder.showHide('show',top.get('loadingMask'));
top.ICEcoder.filesFrame.contentWindow.frames['fileControl'].location.href = "github.php?action=clone&csrf="+top.ICEcoder.csrf;
},4);
}
<?php ;}; ?>
}
</script>
</body>
</html>

37
lib/github-manager.css Normal file
View File

@@ -0,0 +1,37 @@
/* First, reset everything to a standard */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
border: 0;
margin: 0;
padding: 0;
outline: 0;
font-size: 12px;
vertical-align: top;
}
body {overflow: hidden;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
h1 {font-size: 36px; font-weight: normal; color: #888; margin-bottom: 20px}
a {color: #fff; text-decoration: none}
input {padding: 4px; border: 1px solid #555; background-color: #444; color: #fff}
input:focus {
outline: none;
-webkit-box-shadow: 0 0 10px 1px rgba(0,198,255,0.7);
-moz-box-shadow: 0 0 10px 1px rgba(0,198,255,0.7);
box-shadow: 0 0 10px 1px rgba(0,198,255,0.7);
}
.githubManager {font-family: arial, verdana, helvetica, sans-serif; background-color: #1c1c19; color: #fff; padding: 20px}
.githubManager .info {font-size: 10px; color: rgba(0,198,255,0.7); cursor: help}

246
lib/github-manager.php Normal file
View File

@@ -0,0 +1,246 @@
<?php
include("headers.php");
include("settings.php");
$t = $text['github-manager'];
// If we have an action to perform
if (!$demoMode && isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] && isset($_GET['action'])) {
// Get our old paths & user settings
$oldLocal = $ICEcoder["githubLocalPaths"];
$oldRemote = $ICEcoder["githubRemotePaths"];
$settingsContents = file_get_contents($settingsFile,false,$context);
// ========
// CHOOSING
// ========
if ($_GET['action']=="choose") {
$pathPair = numClean($_GET['pathPair']);
$chosenLocal = $oldLocal[$pathPair];
$chosenRemote = $oldRemote[$pathPair];
$pathValid = false;
if (!is_dir($docRoot.$chosenLocal)) {
if (is_writable($docRoot)) {
mkdir($docRoot.$chosenLocal, octdec($ICEcoder['newDirPerms']));
} else {
echo "<script>top.ICEcoder.message('".$t['Sorry, cannot create...']."\\n".$chosenLocal."');</script>";
}
}
if (is_dir($docRoot.$chosenLocal)) {
$pathValid = true;
}
if ($pathValid) {
// New setting for the root path
$settingsNew = '"root" => "'.$chosenLocal.'",'.PHP_EOL;
// Identify the bit to replace
$repPosStart = strpos($settingsContents,'"root"');
$repPosEnd = strpos($settingsContents,'"checkUpdates"');
// Compile our new settings
$settingsContents = substr($settingsContents,0,$repPosStart).$settingsNew.substr($settingsContents,$repPosEnd,strlen($settingsContents));
// Now update the config file
if (is_writeable($settingsFile)) {
$fh = fopen($settingsFile, 'w');
fwrite($fh, $settingsContents);
fclose($fh);
// Hide this popup and reload file manager
echo "<script>top.ICEcoder.showHide('hide',top.document.getElementById('blackMask'));top.ICEcoder.refreshFileManager();</script>";
} else {
echo "<script>top.ICEcoder.message('".$t['Cannot update config...']." lib/".$settingsFile." ".$t['and try again']."');</script>";
}
}
}
// ======
// ADDING
// ======
if ($_GET['action']=="add") {
// Start creating a new chunk for the github paths
$settingsNew = '"githubLocalPaths" => array(';
// Add the new one
if ($_POST['githubLocalPathNEW'] != "" && $_POST['githubRemotePathNEW'] != "") {
$settingsNew .= '"'.xssClean($_POST['githubLocalPathNEW'],"html").'",';
}
// Then set all the old local paths
for ($i=0; $i<count($oldLocal); $i++) {
$settingsNew .= '"'.$oldLocal[$i].'",';
}
// Rtrim off the last comma
$settingsNew = rtrim($settingsNew,',');
$settingsNew .= '),'.PHP_EOL;
// Now do the same for the remote paths
$settingsNew .= '"githubRemotePaths" => array(';
// Add the new one
if ($_POST['githubLocalPathNEW'] != "" && $_POST['githubRemotePathNEW'] != "") {
$settingsNew .= '"'.xssClean($_POST['githubRemotePathNEW'],"html").'",';
}
// Then set all the old remote paths
for ($i=0; $i<count($oldRemote); $i++) {
$settingsNew .= '"'.$oldRemote[$i].'",';
}
// Rtrim off the last comma
$settingsNew = rtrim($settingsNew,',');
$settingsNew .= '),'.PHP_EOL;
}
// ===================
// UPDATING & REMOVING
// ===================
if ($_GET['action']=="update") {
// Start creating a new chunk for the github paths
$settingsNew = '"githubLocalPaths" => array(';
// Redo the arrays using the form data
for ($i=0; $i<count($oldLocal); $i++) {
if ($_POST['githubLocalPath'.$i] != "") {
$settingsNew .= '"'.xssClean($_POST['githubLocalPath'.$i],"html").'",';
}
}
// Rtrim off the last comma
$settingsNew = rtrim($settingsNew,',');
$settingsNew .= '),'.PHP_EOL;
// Now do the same for the remote paths
$settingsNew .= '"githubRemotePaths" => array(';
// Redo the arrays using the form data
for ($i=0; $i<count($oldRemote); $i++) {
if ($_POST['githubRemotePath'.$i] != "") {
$settingsNew .= '"'.xssClean($_POST['githubRemotePath'.$i],"html").'",';
}
}
// Rtrim off the last comma
$settingsNew = rtrim($settingsNew,',');
$settingsNew .= '),'.PHP_EOL;
}
if ($_GET['action']!="choose") {
// Now we have a new settingsNew string to use
// we can update the path arrays in the settings file
// Identify the bit to replace
$repPosStart = strpos($settingsContents,'"githubLocalPaths"');
$repPosEnd = strpos($settingsContents,'"previousFiles"');
// Compile our new settings
$settingsContents = substr($settingsContents,0,$repPosStart).$settingsNew.substr($settingsContents,$repPosEnd,strlen($settingsContents));
// Now update the config file
if (is_writeable($settingsFile)) {
$fh = fopen($settingsFile, 'w');
fwrite($fh, $settingsContents);
fclose($fh);
// Finally, reload the iFrame screen for the user
header("Location: github-manager.php?updatedGithubPaths&csrf=".$_SESSION["csrf"]);
echo "<script>window.location='github-manager.php?updatedGithubPaths&csrf='+top.ICEcoder.csrf;</script>";
die($t['saving github paths']);
} else {
echo "<script>top.ICEcoder.message('".$t['Cannot update config...']." lib/".$settingsFile." ".$t['and try again']."');</script>";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>ICEcoder <?php echo $ICEcoder["versionNo"];?> GitHub manager</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" type="text/css" href="github-manager.css?microtime=<?php echo microtime(true);?>">
</head>
<body class="githubManager">
<h1><?php echo $t['github paths'];?></h1>
<div style="display: inline-block; width: 620px; height: 340px; overflow-y: auto">
<?php
$pathsLocal = $ICEcoder['githubLocalPaths'];
$pathsRemote = $ICEcoder['githubRemotePaths'];
if (count($pathsLocal) > 0) {
?>
<div style="display: inline-block; width: 600px; margin-bottom: 30px">
<h2><?php echo $t['Choose existing path'];?></h2><br>
<form id="githubUpdateForm" action="github-manager.php?action=update" method="POST">
<table>
<tr>
<td style="padding-left: 5px"><?php echo $t['Local path'];?> <span class="info" title="<?php echo $t['Slash prefixed'];?>">[?]</span></td>
<td style="padding-left: 5px"><?php echo $t['Remote GitHub path'];?> <span class="info" title="<?php echo $t['Absolute URL beginning...'];?>">[?]</span></td>
</tr>
<?php
for ($i=0; $i<count($pathsLocal); $i++) {
echo '<tr>';
echo '<td style="padding: 0 10px 8px 0"><input type="text" name="githubLocalPath'.$i.'" value="'.$pathsLocal[$i].'" style="width: 250px"></td>';
echo '<td style="padding: 0 10px 8px 0"><input type="text" name="githubRemotePath'.$i.'" value="'.$pathsRemote[$i].'" style="width: 250px"></td>';
echo '<td style="padding: 2px 0 8px 0"><div style="display: inline-block; padding: 5px; background: #2187e7; color: #fff; font-size: 12px; cursor: pointer" onclick="window.location=\'github-manager.php?action=choose&pathPair='.$i.'&csrf='.$_SESSION["csrf"].'\'">'.$t['Choose'].'</div></td>';
echo '</tr>';
}
echo '<tr>';
echo '<td style="padding-top: 7px; color: #444">'.$t['Set local and...'].'</td>';
echo '<td style="padding: 3px 10px 8px 0; text-align: right"><div style="display: inline-block; padding: 5px; background: #2187e7; color: #fff; font-size: 12px; cursor: pointer" onclick="document.getElementById(\'githubUpdateForm\').submit()">'.$t['Update'].'</div></td>';
echo '</tr>';
?>
</table>
<input type="hidden" name="csrf" value="<?php echo $_SESSION["csrf"]; ?>">
</form>
</div>
<?php
;};
?>
<div style="display: inline-block; width: 600px">
<h2><?php echo $t['Add new path'];?></h2><br>
<form id="githubAddForm" action="github-manager.php?action=add" method="POST">
<table>
<tr>
<td style="padding-left: 5px"><?php echo $t['Local path'];?> <span class="info" title="<?php echo $t['Slash prefixed'];?>">[?]</span></td>
<td style="padding-left: 5px"><?php echo $t['Remote GitHub path'];?> <span class="info" title="<?php echo $t['Absolute URL beginning...'];?>">[?]</span></td>
</tr>
<tr>
<td style="padding: 0 10px 8px 0"><input type="text" name="githubLocalPathNEW" value="" style="width: 250px"></td>
<td style="padding: 0 0 8px 0"><input type="text" name="githubRemotePathNEW" value="" style="width: 250px"></td>
</tr>
<tr>
<td colspan="2" style="padding: 3px 0 8px 0; text-align: right"><div style="display: inline-block; padding: 5px; background: #2187e7; color: #fff; font-size: 12px; cursor: pointer" onclick="document.getElementById('githubAddForm').submit()"><?php echo $t['Add'];?></div></td>
</tr>
</table>
<input type="hidden" name="csrf" value="<?php echo $_SESSION["csrf"]; ?>">
</form>
</div>
<h2 style="margin-bottom: 10px"><?php echo $t['Usage Info'];?></h2>
<p style="color: #888; margin: 0 10px 10px 0"><?php echo $t['Enter relative local...'];?></p>
<p style="color: #888; margin: 0 10px 10px 0"><?php echo $t['You can then...'];?></p>
<p style="color: #888; margin: 0 10px 10px 0"><?php echo $t['The file manager...'];?></p>
<p style="color: #888; margin: 0 10px 0 0"><?php echo $t['If you want...'];?></p>
</div>
</body>
</html>

36
lib/github.css Normal file
View File

@@ -0,0 +1,36 @@
/* First, reset everything to a standard */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
border: 0;
margin: 0;
padding: 0;
outline: 0;
font-size: 12px;
vertical-align: top;
}
body {overflow: hidden;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
h1 {font-size: 36px; font-weight: normal; color: #888; margin-bottom: 20px}
a {color: #fff; text-decoration: none}
input, textarea {font-family: arial, verdana, helvetica, sans-serif; padding: 4px; border: 1px solid #555; background-color: #444; color: #fff}
input:focus, textarea:focus {
outline: none;
-webkit-box-shadow: 0 0 10px 1px rgba(0,198,255,0.7);
-moz-box-shadow: 0 0 10px 1px rgba(0,198,255,0.7);
box-shadow: 0 0 10px 1px rgba(0,198,255,0.7);
}
.githubAction {font-family: arial, verdana, helvetica, sans-serif; background-color: #1c1c19; color: #fff; padding: 20px}

413
lib/github.js Normal file
View File

@@ -0,0 +1,413 @@
// This file contains the HTTP Req Abs, Repo API and getRepo
// portions of Top Level API from github.com/michael/github.js
// ORIGINAL LIB:
// Github.js 0.7.0
// (c) 2012 Michael Aufreiter, Development Seed
// Github.js is freely distributable under the MIT license.
// For all details and documentation:
// http://substance.io/michael/github
(function() {
var Github;
var API_URL = 'https://api.github.com';
Github = window.Github = function(options) {
// HTTP Request Abstraction
// =======
//
// I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.
function _request(method, path, data, cb, raw) {
function getURL() {
var url = API_URL + path;
return url + ((/\?/).test(url) ? "&" : "?") + (new Date()).getTime();
}
var xhr = new XMLHttpRequest();
if (!raw) {xhr.dataType = "json"}
xhr.open(method, getURL());
xhr.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status >= 200 && this.status < 300 || this.status === 304) {
cb(null, raw ? this.responseText : this.responseText ? JSON.parse(this.responseText) : true);
} else {
cb({request: this, error: this.status});
}
}
}
xhr.setRequestHeader('Accept','application/vnd.github.raw');
xhr.setRequestHeader('Content-Type','application/json;charset=UTF-8');
if (
(options.auth == 'oauth' && options.token) ||
(options.auth == 'basic' && options.username && options.password)
) {
xhr.setRequestHeader('Authorization',options.auth == 'oauth'
? 'token '+ options.token
: 'Basic ' + Base64.encode(options.username + ':' + options.password)
);
}
data ? xhr.send(JSON.stringify(data)) : xhr.send();
}
// Repository API
// =======
Github.Repository = function(options) {
var repo = options.name;
var user = options.user;
var that = this;
var repoPath = "/repos/" + user + "/" + repo;
var currentTree = {
"branch": null,
"sha": null
};
// Uses the cache if branch has not been changed
// -------
function updateTree(branch, cb) {
if (branch === currentTree.branch && currentTree.sha) return cb(null, currentTree.sha);
that.getRef("heads/"+branch, function(err, sha) {
currentTree.branch = branch;
currentTree.sha = sha;
cb(err, sha);
});
}
// Get a particular reference
// -------
this.getRef = function(ref, cb) {
_request("GET", repoPath + "/git/refs/" + ref, null, function(err, res) {
if (err) return cb(err);
cb(null, res.object.sha);
});
};
// Create a new reference
// --------
//
// {
// "ref": "refs/heads/my-new-branch-name",
// "sha": "827efc6d56897b048c772eb4087f854f46256132"
// }
this.createRef = function(options, cb) {
_request("POST", repoPath + "/git/refs", options, cb);
};
// Delete a reference
// --------
//
// repo.deleteRef('heads/gh-pages')
// repo.deleteRef('tags/v1.0')
this.deleteRef = function(ref, cb) {
_request("DELETE", repoPath + "/git/refs/"+ref, options, cb);
};
// List all branches of a repository
// -------
this.listBranches = function(cb) {
_request("GET", repoPath + "/git/refs/heads", null, function(err, heads) {
if (err) return cb(err);
cb(null, _.map(heads, function(head) { return _.last(head.ref.split('/')); }));
});
};
// Retrieve the contents of a blob
// -------
this.getBlob = function(sha, cb) {
_request("GET", repoPath + "/git/blobs/" + sha, null, cb, 'raw');
};
// For a given file path, get the corresponding sha (blob for files, tree for dirs)
// -------
this.getSha = function(branch, path, cb) {
// Just use head if path is empty
if (path === "") return that.getRef("heads/"+branch, cb);
that.getTree(branch+"?recursive=true", function(err, tree) {
var file = _.select(tree, function(file) {
return file.path === path;
})[0];
cb(null, file ? file.sha : null);
});
};
// Retrieve the tree a commit points to
// -------
this.getTree = function(tree, cb) {
_request("GET", repoPath + "/git/trees/"+tree, null, function(err, res) {
if (err) return cb(err);
cb(null, res.tree);
});
};
// Post a new blob object, getting a blob SHA back
// -------
this.postBlob = function(content, cb) {
if (typeof(content) === "string") {
content = {
"content": content,
"encoding": "utf-8"
};
}
_request("POST", repoPath + "/git/blobs", content, function(err, res) {
if (err) return cb(err);
cb(null, res.sha);
});
};
// Update an existing tree adding a new blob object getting a tree SHA back
// -------
this.updateTree = function(baseTree, path, blob, cb) {
var data = {
"base_tree": baseTree,
"tree": [
{
"path": path,
"mode": "100644",
"type": "blob",
"sha": blob
}
]
};
_request("POST", repoPath + "/git/trees", data, function(err, res) {
if (err) return cb(err);
cb(null, res.sha);
});
};
// Post a new tree object having a file path pointer replaced
// with a new blob SHA getting a tree SHA back
// -------
this.postTree = function(tree, cb) {
_request("POST", repoPath + "/git/trees", { "tree": tree }, function(err, res) {
if (err) return cb(err);
cb(null, res.sha);
});
};
// Create a new commit object with the current commit SHA as the parent
// and the new tree SHA, getting a commit SHA back
// -------
this.commit = function(parent, tree, message, cb) {
var data = {
"message": message,
"author": {
"name": options.username
},
"parents": [
parent
],
"tree": tree
};
_request("POST", repoPath + "/git/commits", data, function(err, res) {
currentTree.sha = res.sha; // update latest commit
if (err) return cb(err);
cb(null, res.sha);
});
};
// Update the reference of your head to point to the new commit SHA
// -------
this.updateHead = function(head, commit, cb) {
_request("PATCH", repoPath + "/git/refs/heads/" + head, { "sha": commit }, function(err, res) {
cb(err);
});
};
// Show repository information
// -------
this.show = function(cb) {
_request("GET", repoPath, null, cb);
};
// Get contents
// --------
this.contents = function(path, cb) {
_request("GET", repoPath + "/contents", { path: path }, cb);
};
// Fork repository
// -------
this.fork = function(cb) {
_request("POST", repoPath + "/forks", null, cb);
};
// Create pull request
// --------
this.createPullRequest = function(options, cb) {
_request("POST", repoPath + "/pulls", options, cb);
};
// Read file at given path
// -------
this.read = function(branch, path, cb) {
that.getSha(branch, path, function(err, sha) {
if (!sha) return cb("not found", null);
that.getBlob(sha, function(err, content) {
cb(err, content, sha);
});
});
};
// Remove a file from the tree
// -------
this.remove = function(branch, path, cb) {
updateTree(branch, function(err, latestCommit) {
that.getTree(latestCommit+"?recursive=true", function(err, tree) {
// Update Tree
var newTree = _.reject(tree, function(ref) { return ref.path === path });
_.each(newTree, function(ref) {
if (ref.type === "tree") delete ref.sha;
});
that.postTree(newTree, function(err, rootTree) {
that.commit(latestCommit, rootTree, 'Deleted '+path , function(err, commit) {
that.updateHead(branch, commit, function(err) {
cb(err);
});
});
});
});
});
};
// Move a file to a new location
// -------
this.move = function(branch, path, newPath, cb) {
updateTree(branch, function(err, latestCommit) {
that.getTree(latestCommit+"?recursive=true", function(err, tree) {
// Update Tree
_.each(tree, function(ref) {
if (ref.path === path) ref.path = newPath;
if (ref.type === "tree") delete ref.sha;
});
that.postTree(tree, function(err, rootTree) {
that.commit(latestCommit, rootTree, 'Deleted '+path , function(err, commit) {
that.updateHead(branch, commit, function(err) {
cb(err);
});
});
});
});
});
};
// Write file contents to a given branch and path
// -------
this.write = function(branch, path, content, message, cb) {
updateTree(branch, function(err, latestCommit) {
if (err) return cb(err);
that.postBlob(content, function(err, blob) {
if (err) return cb(err);
that.updateTree(latestCommit, path, blob, function(err, tree) {
if (err) return cb(err);
that.commit(latestCommit, tree, message, function(err, commit) {
if (err) return cb(err);
that.updateHead(branch, commit, cb);
});
});
});
});
};
};
// Gists API
// =======
Github.Gist = function(options) {
var id = options.id;
var that = this;
var gistPath = "/gists/"+id;
// Read the gist
// --------
this.read = function(cb) {
_request("GET", gistPath, null, function(err, gist) {
cb(err, gist);
});
};
// Delete the gist
// --------
this.delete = function(cb) {
_request("DELETE", gistPath, null, function(err,res) {
cb(err,res);
});
};
// Fork a gist
// --------
this.fork = function(cb) {
_request("POST", gistPath+"/fork", null, function(err,res) {
cb(err,res);
});
};
// Update a gist with the new stuff
// --------
this.update = function(options, cb) {
_request("PATCH", gistPath, options, function(err,res) {
cb(err,res);
});
};
};
// Top Level API
// -------
this.getRepo = function(user, repo) {
return new Github.Repository({user: user, name: repo});
};
Github.User = function(token) {
console.log(token);
this.validate = function(cb) {
_request("GET", "/applications/"+token+"/tokens/", function(err, res) {
console.log(err);
console.log(res);
cb(err,res);
});
};
}
this.getUser = function(token) {
return new Github.User(token);
};
};
}).call(this);

Some files were not shown because too many files have changed in this diff Show More