Compare commits

..

1809 Commits
v0.7.2 ... v5.3

Author SHA1 Message Date
Matt Pass
68eb4a0393 Version 5.3 2015-11-13 12:30:43 +00:00
Matt Pass
5fc4ae596a Disabled closing tag completion till fixed 2015-11-13 10:26:09 +00:00
Matt Pass
e31f435640 Show editor and add functions to 2 x buttons
Include settings instead, plus CodeMirror lib and CSS
Set some CSS classes, and CodeMirror CSS files
Display clickable list of backups
DIV container added for editor display and buttons
Display CodeMirror instance and setup 2 x functions to open backup in
new tab or diff pane
2015-10-25 11:46:29 +00:00
Matt Pass
80acab0bf0 .button class added 2015-10-25 11:42:41 +00:00
Matt Pass
a95484d044 Load chosen backup, show buttons and set preview 2015-10-25 11:42:18 +00:00
Matt Pass
d979d76866 PT BR translation tweaks by Adir Prawutzki 2015-10-15 18:52:05 +01:00
Matt Pass
5f6c6838a0 Use singular term if 1 2015-10-09 08:47:55 +01:00
Matt Pass
cb6d339183 Display list of backups per date 2015-10-08 09:27:34 +01:00
Matt Pass
815578eb34 Now getting count info & as 2nd part use arrray val 2015-10-08 09:26:09 +01:00
Matt Pass
c5996f7b23 Returns count and array now, rev scandir order 2015-10-08 09:25:11 +01:00
Matt Pass
e89d449805 onclick open versions screen and pass sel filepath 2015-10-08 09:24:01 +01:00
Matt Pass
5b549c5102 Text pieces added for backup-versions 2015-10-08 09:22:49 +01:00
Matt Pass
fa793564d9 Display backups instead & can show versions screen 2015-10-08 09:21:50 +01:00
Matt Pass
395fdf0727 Merge pull request #592 from unix4you2/master
Spanish upgrade for multiple strings
2015-10-07 18:28:45 +01:00
Matt Pass
7f8e052a26 Handle newly saved files to avoid NaN 2015-10-03 18:31:53 +01:00
Matt Pass
b349891321 html, 3 x meta tags and favicon added
Missing html tag, set UTF-8, no index or follow for robots, a mobile
viewport that's scalable and use a favicon
2015-10-03 17:47:25 +01:00
Matt Pass
592c8ccda4 Clear iceRoot from checked path and check locNest
These couple of bug fixes ensure paths aren't compounded and also handle
empty dirs correctly
2015-10-03 17:40:19 +01:00
unix4you2
a366a84d00 Spanish upgrade for multiple strings 2015-09-28 14:00:42 -05:00
Matt Pass
f4762fbaf3 Working with file version counter now 2015-09-18 11:09:30 +01:00
Matt Pass
b00ce2f7c9 Get number of versions for this file 2015-09-18 11:06:53 +01:00
Matt Pass
6ccf0fb135 Working with file versions now
Establish and use version URL part
Add 1 to count on saving local or FTP and update version display after
doing this
All backed up files now have incremental numbers in parens postfixed on
filename
.versions-index file written to with new file line or if line exists
update count on it
On re-getting file due to save conflict, get the count and set in JS
array
2015-09-18 11:04:42 +01:00
Matt Pass
3c6a60f96d Class added for versions display container 2015-09-18 10:50:45 +01:00
Matt Pass
84fefcbad0 On opening file, push in version count and display 2015-09-18 10:49:48 +01:00
Matt Pass
139ca019bb Versions display container added 2015-09-18 10:48:59 +01:00
Matt Pass
0245ae418a Wording change and now shows 'X days of backups' 2015-09-09 08:43:36 +01:00
Matt Pass
a78d847f4e More text added re backups 2015-09-09 08:38:06 +01:00
Matt Pass
0592459666 Backup system working with params now
Only run backup process if user has this turned on. Some code
simplification added. Removes old backups past X days as per user
setting.
2015-09-08 08:03:53 +01:00
Matt Pass
6492068717 Update 2 new backup settings on updating 2015-09-08 08:00:38 +01:00
Matt Pass
36ea3eabc4 Backup settings added to turn on/off and for X days 2015-09-08 07:59:52 +01:00
Matt Pass
5c19367b87 disabled pseudo added for text input fields 2015-09-08 07:59:15 +01:00
Matt Pass
3a08ccf350 backupsKept and backupsDays settings added
Decided to go with it being turned on and kept for 14 days as default
2015-09-08 07:58:15 +01:00
Matt Pass
f5897cd036 Language pieces added for backups 2015-09-08 07:57:28 +01:00
Matt Pass
4f7ea84754 Use yyyy-mm-dd structure instead 2015-09-07 10:27:41 +01:00
Matt Pass
b46e2f324a Redone backup dir struc for subdirs & efficiency
Now establishes path from base and if full path doesn't exist, it fills
in the blanks, including sub-dir structure to file from base.
2015-09-07 09:49:18 +01:00
Matt Pass
0c3390929b Store a backup of our file each time we save
Saves into a host > year > month-day dir, with in incremental backup
names, number in parens
2015-09-05 19:02:45 +01:00
Matt Pass
857fa2580c Pane scroll position tweaks for soother scrolling
Match scroll pos on going split pane.
Only sync both panes if we're in split pane mode
Action the scrollTo after a 0ms tickover to give priority to browser
controls over syncing. This means on manic scrolling there may be very
slight judder, but it avoids 99% and appears smooth for reasonable
scrolling
2015-09-05 17:17:51 +01:00
Matt Pass
40e699828b FTP check file/dir & use string, FTP delete added 2015-09-05 16:28:17 +01:00
Matt Pass
60b527d5a4 Function added to delete file/dir over FTP 2015-09-05 16:25:57 +01:00
Matt Pass
1c99f127be Replace alert with message 2015-09-05 16:24:29 +01:00
Matt Pass
3221bea7a7 Message added re deleting >1 item under FTP 2015-09-05 16:22:55 +01:00
Matt Pass
96bba6972a Can now use regular +/- chars also 2015-09-05 13:42:13 +01:00
Matt Pass
b9546dfaa4 Small tweak to Portuguese BR char 2015-09-05 13:32:32 +01:00
Matt Pass
340e3b3d4d Chars replaced with HTML entites
Thanks for Reinaldo César Guedes for this!
2015-09-05 13:18:17 +01:00
Matt Pass
e1a2a8da71 FTP enhancements
FTP items: ongoing connection, save finished, improved/multiple doNext
messages, check dir/file, JSON details output
2015-09-01 20:05:47 +01:00
Matt Pass
38a5bea898 Merge pull request #581 from bhz6344/patch-1
To fix Chinese character display abnormal
2015-08-21 06:06:54 +01:00
Matt Pass
fa5b549081 Tweaks to save and move
Only use docRoot if not FTP (ie, local)
srcDir and tgtDir need prefixed slashes removed
Use JS isFileFolder function to establish dir/file type as short term
measure, to be replaced with FTP call to establish type so can all be
handled server side
2015-08-20 10:30:33 +01:00
Matt Pass
379f6ac1c3 Return info on a file over FTP 2015-08-20 09:26:29 +01:00
Matt Pass
87be112d9f isFileFolder function added to return DOM elem type
Detects by classname and returns folder/file or false if not found
2015-08-20 09:25:47 +01:00
Matt Pass
491edf256e Can now move a file/dir over FTP 2015-08-20 09:21:00 +01:00
Matt Pass
f38e984b31 Rename now working for FTP 2015-08-19 07:07:31 +01:00
Matt Pass
b1df1e8403 Use ftpStart and ftpEnd functions 2015-08-19 06:36:04 +01:00
Matt Pass
41592007b9 ftpStart and ftpEnd functions added 2015-08-19 06:34:51 +01:00
Matt Pass
78ddfe61ba FTP processes added to handle mkdir and chmod 2015-08-18 07:06:04 +01:00
Matt Pass
2bfef30c03 New FTP functions added to mkdir and change perms 2015-08-18 07:03:45 +01:00
bhz6344
ac65cd89c1 To fix Chinese character display abnormal
When "default_charset" was not set in php.ini,and the file contents chinese char,it may show incorrectly.
Because the function htmlentities() takes "ISO-8859-1" as default value of "default_charset"  if PHP version is lower than 5.4.
So I think it's better to check the "default_charset" before function htmlentities().
What's your opinion?
2015-08-17 14:23:45 +08:00
Matt Pass
7540ef846f Version 5.2 2015-08-13 11:22:28 +01:00
Matt Pass
57bf19d69c Undo change, overwrote commit by mistake 2015-08-13 10:47:24 +01:00
Matt Pass
e330a57da8 Rename var, as used in isset checks
Renamed var to distinguish from ftpSite, which is checked for existance
with isset and if available jumps into FTP mode. Having it previously
set to false, it's available, so erroneously goes into FTP mode with no
creds. This is a standalone var name now just to establish connection
channel.
2015-08-13 09:31:12 +01:00
Matt Pass
2ef1637d0b Clarify var by calling it ftpRoot 2015-08-13 09:23:11 +01:00
Matt Pass
01dc2f7943 FTP control started, with list, open and save
Function added to get a raw list from the FTP connection and work with
this string to return simple and detailed lists as arrays to use
Get contents function added to get content from file over FTP and stream
it back as the return
Finally, function added to save over FTP
2015-08-13 09:16:11 +01:00
Matt Pass
0606025a46 Can now save content over FTP
Include FTP control lib and include/exclude items if we have ftpSite
If ftpSite, establish connection and if no errors, write the content to
the filepath before closing connection
2015-08-13 09:12:41 +01:00
Matt Pass
aefee93cf6 Can now load content over FTP
Include new FTP control lib, no need for saveType here and
exclude/include doing certain things if we have an ftpSite
Getting file over FTP creates connection and establishes any errors plus
loads conent
Image display uses ftpSite and also remove stray end script tag
2015-08-13 09:10:09 +01:00
Matt Pass
3222a3202c FTP param structure added 2015-08-13 09:06:31 +01:00
Matt Pass
4d1b4e2237 Can now get branch over FTP
Include new FTP lib and if we have FTP site params available connect
over FTP as the list to show
2015-08-13 08:57:38 +01:00
Matt Pass
8afacd3ef8 Update to match main JS file 2015-08-13 08:55:20 +01:00
Matt Pass
b07cdd6fc7 Allow images to populate canvas cross-origin 2015-08-13 08:52:01 +01:00
Matt Pass
1237d5868a Changes to UTF-8 encoding logic 2015-08-13 08:51:38 +01:00
Matt Pass
f9418db57f Check if string is strict UTF8 and if not encode
Handles other ISO formatted filetypes this way
2015-07-30 19:19:55 +01:00
Matt Pass
e741d6c207 Cache params added and ensuring app/octet-stream 2015-07-30 19:16:05 +01:00
Matt Pass
66ec7c34c6 Tweaked BG and simultaneous tags 2015-07-19 21:40:39 +01:00
Matt Pass
15ff1534c3 Tweaked BG 2015-07-19 21:16:53 +01:00
Matt Pass
fca567d53c Tweaked BG and more subtle footer strip BG 2015-07-19 21:16:39 +01:00
Matt Pass
2db6c44dbc Tweaked BG 2015-07-19 21:16:00 +01:00
Matt Pass
45e18a5daf More line height, tweaked BG & call before change 2015-07-19 21:15:35 +01:00
Matt Pass
2802e20401 Brighter pink, error moved to after tag class
Needs to move to avoid being overidden
2015-07-19 19:04:18 +01:00
Matt Pass
a2bdab0bcf Merge pull request #576 from pietrondo/master
update italian language
2015-07-19 11:07:00 +01:00
pietrondo
4ea49c197b update italian language 2015-07-16 16:54:30 +02:00
Matt Pass
fae387002c Merge pull request #573 from unix4you2/master
Spanish upgrade when F5 (Ctrl-R) is pressed
2015-07-12 09:33:28 +01:00
unix4you2
9a2fa27010 Spanish upgrade when F5 (Ctrl-R) is pressed 2015-07-09 15:53:06 -05:00
Matt Pass
0e82fb8c97 Settings section tabbed and tidied up also 2015-07-09 12:11:13 +01:00
Matt Pass
9cc53f474e Don't update the preview window if curr tab is new 2015-07-09 12:10:42 +01:00
Matt Pass
9d661e454e Responsive helper plugin ready plus 500x500px PW 2015-07-09 12:08:19 +01:00
Matt Pass
e52b7c673f Notes added as these are updated via JS obj update 2015-07-03 21:53:29 +01:00
Matt Pass
d676c11473 Rename vars, update top and FM on font size change 2015-07-03 21:52:14 +01:00
Matt Pass
b87f5ba969 Need to declare as function, error handling 2015-06-30 17:18:36 +01:00
Matt Pass
0f29baf504 Tweaks and comments
Need a semi colon for inline JS, improved and added comments
2015-06-30 17:17:55 +01:00
Matt Pass
166d27ca4c Show anim on trial bar, new checkExists function
Run autoOpenFiles after 200ms, giving time for ICEcoder to finish
displaying onscreen, including the trial bar animating (over 150ms)
checkExists is a new function which will take a path and give you back a
status object, stored under lastFileDirCheckStatusObj
Only set fileControl URL if serverQueueItems[0] is available, it isn't
under new setup with extra AJAX call
2015-06-30 17:05:50 +01:00
Matt Pass
f39093c78f Better way of handling file existence checking
Vars to determine if we have overwrite OK permission from user or
there's no conflict with filenames, so it's a new one and we can save
Don't check for DOM node to decide if we can save or not anymore,
instead run an XHR that ends up setting lastFileDirCheckStatusObj from
false to something
On spotting that, clear the interval and continue by asking user if they
want to overwrite, or if there's no conflict, set that value instead
If we have no newFileName or we have one but no permission to overwrite
yet, set the content for use in a moment under saveAsContent and we loop
back around
2015-06-30 16:45:51 +01:00
Matt Pass
f7d9b050b3 Don't consider adding commas to comment lines
As the comma won't be at the end, but in the middle and adding one to
the end causes PHP issues
2015-06-26 14:34:10 +01:00
Matt Pass
ab0cef93b7 isset check to avoid PHP notice 2015-06-26 13:58:10 +01:00
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
Matt Pass
a4bb1605ce v1.1 release 2012-11-12 09:27:04 +00:00
Matt Pass
c4d24c0a4c Pasting a new file
Looks to see if the location is writable and if so, copy our file to
that location
Then adds the new file to the file manager, otherwise, informs you it
couldn't do it
Clears server message eitherway
2012-11-12 09:26:50 +00:00
Matt Pass
99dedb61cb copyFile, pasteFile & hideFileMenu functions
copyFile simply sets a var same as the provided selFile var then hides
menu
pasteFile adds a paste file item to the server queue and shows message
hideFileMenu added as the opposite of showFileMenu function
2012-11-12 09:25:32 +00:00
Matt Pass
702c3d069f New options for copy & paste
Copy can be done on anything, paste can only be done on folders
2012-11-12 09:21:39 +00:00
Matt Pass
8ec8efe967 Fix to only pass tests if matching dir exactly
Stops for instance matching dir/fold on dir/foldersz
2012-10-31 16:00:03 +00:00
Matt Pass
4aa0260399 Extending case insensitive find & replace
Checking if we have a $_GET['target'] before use to avoid PHP notices
findText is converted to lowercase
Global case insensitive searching with regex in open documents
Find/replace in filenames now compares in a case insensitive way
Split the resultsDisplay generation onto 3 lines to make it easier to
read
Fixed issue with showing 'replace with xxx' when you're actually just
finding
2012-10-30 17:50:34 +00:00
Matt Pass
f24aaf1396 Added key exclusion back in
Was causing occasional issues with keypresses. Maybe 10% of the time.
Added this back in until I stop this function being triggered on
anything but changes.
2012-10-30 13:40:14 +00:00
Matt Pass
00ddd056af 1px shift to top of replace input field
To match find input field
2012-10-26 19:08:56 +01:00
Matt Pass
2438fbb13d Tweaks to look of find controls
.find class now slightly taller and has top shifted 1px to look more
like other controls
Removed border from submit button
Now also has a dark grey look and BG turns blue on hover
2012-10-26 19:04:37 +01:00
Matt Pass
20832c3dcc Can now press Enter to submit Find control
Button is now a submit, onClick action moved to form tag as onSubmit
Also returns false to stop actually submitting form data
2012-10-26 19:03:05 +01:00
Matt Pass
725461f04e Make searches case insensitive by default
This is to match finding in files and is typically the default.
Need to extend this logic to find in all documents and also filenames.
Also add case insensitive switch to find/replace control.
2012-10-26 18:36:33 +01:00
Matt Pass
a3edd7bdf9 Upgrade to CodeMirror 2.35 2012-10-26 18:04:47 +01:00
Matt Pass
8d9d330678 Upgrade to CodeMirror 2.35 2012-10-26 17:59:36 +01:00
Matt Pass
d46fa3012b Remove CodeMirror v2.34
Upgrading to v2.35
2012-10-26 17:59:21 +01:00
Matt Pass
75e9f916ec Opening file by mime type now
Detect if it's text based, image based or other and open as appropriate
(text = editor, image = media preview, other = new window)
2012-10-25 12:38:36 +01:00
Matt Pass
f71277008f Check excludeFilesFolders before use
Causes an error otherwise
2012-10-25 11:49:30 +01:00
Matt Pass
184a9d223b Save errors in error-log.txt and set default TZ
You need to set a default timezone for PHP 5.3.0 and onwards. Using
functions such as date without that throws up a warning. However,
getting it from the server causes a warning too. So, I'm getting and
setting it whilst also supressing the warning with @.
2012-10-25 11:48:40 +01:00
Matt Pass
b4c45e33e9 Better clearing of mouseDown, hide serverMessage
mouseDown = false being set now on scoll on iFrame (of File Manager) and
via CM instance for editor, so old method removed
Set serverMessages' display to inline-block when showing, none in 0.2s
when hiding
2012-10-25 11:46:32 +01:00
Matt Pass
eea960bcbd serverMessage transition only applies to opacity
Also removed 2 x display properties from tab class
2012-10-25 11:43:49 +01:00
Matt Pass
609e4397db onScroll of iFrame, set mouseDown to false
This is done on load via an anon function
Avoids the system wanting to resize FM when using FM scrollbar
2012-10-25 11:41:51 +01:00
Matt Pass
b8bfbc5f6a Clear mouseDown flag on scroll of CM
Better solution to what I had previously implemented
2012-10-25 11:40:26 +01:00
Matt Pass
4b274f959e v1.0.0 2012-10-23 20:22:13 +01:00
Matt Pass
e66811a4e2 Removed beta tag 2012-10-23 20:21:39 +01:00
Matt Pass
139bfe775c Don't need key, simplify setting changedContent 2012-10-23 20:00:18 +01:00
Matt Pass
feb26af4bf Now logging errors in the root 2012-10-23 18:28:25 +01:00
Matt Pass
27d75f810a setup vars & check post vars before use
'server_software' also needs to be a string
2012-10-23 18:17:30 +01:00
Matt Pass
bc251d8c2b Var usage tweaks to avoid errors/notices
Check replace exists then use
Global & init vars
ICEroot is actually iceRoot
2012-10-23 18:16:25 +01:00
Matt Pass
bde9010000 init saveType before use, split is now explode 2012-10-23 18:14:34 +01:00
Matt Pass
91314f423f init updateMsg before use 2012-10-23 18:14:09 +01:00
Matt Pass
2bb0a361aa Clear mouseDown state if over scrollbar
Clicking on scrollbar to scroll content set the mouseDown state to true
This wasn't being reset on mouse up and moving mouse pointer towards the
edge of the file manager enabled resizing of width
Now on going beyond editor width (-scrollbar of 20px), sets mouseDown to
false
2012-10-23 15:57:50 +01:00
Matt Pass
5517bf80f9 Fixing close tab issue & changedContent setting
When redoing changedContent values, no longer consider if these keys are
being pressed:
Escape (27), Caps Lock (20), Shift, CTRL, Alt, Pause/Break (16-19),
Left, Up, Right, Down (37-40), Num Lock, Scroll Lock (144-145), Insert,
Delete (45,46) <<-- mistake, Page Up, Page Down, End, Home (33-36), Left
Win Key, Right Win Key (91-92), F1-F12 (112-123)
This is because CM's changed event will not be triggered with these keys
and I'm not calling onkeypress anymore
Also, rather than now just setting and ending up being stuck at 1 (ie,
changed), we're now detecting if we have at least 1 undo level, if so
set to 1, otherwise 0
(This means you can make changes and undo back to the start and it
doesn't count as a change)
Because this is being handled on changedContent array, no longer need to
consider undo level size when figuring out close button BG colour
openFileMDTs were not being shuffled along when closing tabs but are now
Fixed issue with string replacing closeTabButtonX() - brackets not
needed
2012-10-23 15:14:36 +01:00
Matt Pass
f141e6f7a7 cMThisVer removed, establishing via CM object now
The version num is now being established from the CM object itself using
the version method
2012-10-23 14:57:26 +01:00
Matt Pass
7220288460 No longer using hardcoded CM version num
This is now being established using .version, which also indicates extra
info
(Such as '+' for post version updates included, 'beta' to signify that,
etc)
2012-10-23 14:55:54 +01:00
Matt Pass
d9f4955736 No longer check if CodeMirror is latest version
This is down to me to update upon new CM versions being released
User wouldn't be interested and upgrading to newer version could cause
complications
It's also another check/dependency to slow things down/interfere
Because of these reasons, I'm dropping this check
2012-10-23 14:54:26 +01:00
Matt Pass
13255bc58b Clearing global vars
theme, tabsIndent, openLastFiles, tabWidth, previousFiles, showFileMenu
& foldStyle all now contained within ICEcoder object
showFileMenu is a function to ensure file manager menu continues to show
The few instances of i now have scope
Initing the var fileName
This is to reduce the number of global vars
The only global vars should now be ICEcoder, docRoot & iceRoot
2012-10-20 23:52:36 +01:00
Matt Pass
2988de5501 v0.9.1 beta 2012-10-20 16:55:42 +01:00
Matt Pass
70a69f1c3b stickyTabWindow now stickyTab
Removed the flag variable stickyTab and stickyTabWindow now becomes this
Saves excess vars
2012-10-20 16:44:55 +01:00
Matt Pass
7cce0bf865 Show screenshot of ICEcoder 2012-10-20 16:15:23 +01:00
Matt Pass
16e3e92c4a Fullscreen icon now changing on event handler
No longer detecting current image src and showing the opposite icon on
click
We're now changing the icon on screen change event handler
2012-10-20 16:14:56 +01:00
Matt Pass
5f1b78ea1d Login screen button now blue on hover 2012-10-20 15:27:19 +01:00
Matt Pass
9f36a8e5f8 Favicon added and using ice-coder.js & .css 2012-10-09 08:22:56 +01:00
Matt Pass
89a2212408 JS src is ice-coder.js now 2012-10-09 08:22:19 +01:00
Matt Pass
9ed344d22d Renamed to ice-coder.css and .js 2012-10-09 08:21:28 +01:00
Matt Pass
642db4c5b9 Renamed to properties.php & css 2012-10-09 07:57:28 +01:00
Matt Pass
2a93778df7 First sort of file into logical sections 2012-10-09 07:49:03 +01:00
Matt Pass
c11500b791 v0.9.0 alpha 2012-10-08 07:49:43 +01:00
Matt Pass
ee0303dc06 Code condensing
pB var setup to avoid repeating long DOM elem refs again
Removed end point from substr, not necessary
Put 3 x themes into an array and test using indexOf instead
Syntax spacing in a couple of areas
2012-10-08 07:37:08 +01:00
Matt Pass
0d55f3bd81 use showHide, fix availability bug & use regex
use showHide function where possible
Check file and fileName are available before using them
Shorten code by setting in vars and reusing
Syntax & comment simplification
Use regex to work out previousFiles (also fixed comma prefix on string)
Slight adjustment to for loop using less chars
2012-10-06 18:06:01 +01:00
Matt Pass
0e377c1aff New regex for efficiency
More specific regex used to ensure efficiency & speed are optimal
Syntax spacing adjusts on couple of other lines
2012-10-06 15:43:23 +01:00
Matt Pass
388bd7cefa Improved regex on CSS values
Looks for hex, rgb/hsl-a or colour name values in their correct format
Need match ? match[0] : '' to handle no match scenarios
2012-10-05 15:41:58 +01:00
Matt Pass
8234b3b063 newTab now innerLI & better cssColorPreview code
newTab isn't a tab at all, it's inner contents of an LI, so now called
innerLI
2nd insertBefore should be inserting newText not newLI again
New code to get CSS values via regex
Now only showing the preview if the caretLocType is CSS
2012-10-04 18:10:18 +01:00
Matt Pass
573a07026d Simplifying and condensing code
No need to return cM in getcMInstance, just return the ternary value
Shortened a few comments for clarity & byte saving
No need to add length as 2nd param on substrs in a couple of places
newTab setup as string to be used in a couple of places
Ternary shortening on elemType
Converted ternary statement back to if else to byte save on 2 ternaries
Reversing bool on codeAssist var by using ! instead
break is shorter & better too, than increasing i's value to escape
2012-10-03 21:13:35 +01:00
Matt Pass
880e04d760 Anon objects & CM's searchCursor used, fixed nest
Now just usage anonymous objects inline instead of creating for single
use
(saves adding extra vars and is less code)
Removed findLen and replaceLen as only findLen was being used twice
Replaced how we find & replace by using CM's searchcursor
Fix to the selection on hover over nest items, doesn't need -1
(This is because I fixed CM's tagRangeFinder to include last line)
2012-10-03 19:39:11 +01:00
Matt Pass
683752762d Fix to 1st line charCount & simplifying endPos.ch
If our result is within the first line, add 1 to it to fix offset
No need to have ternary case for replace all, this is now done with a
regex
2012-10-03 08:03:51 +01:00
Matt Pass
79a78e0a58 Condensing and simplification
Reducing code in many areas by condensing and simplifying
2012-10-02 07:56:05 +01:00
Matt Pass
c33bea997a Lots of ternary & array check shortening
Shorting to ternary statements instead of if else statements in many
places
Checking indexOf on arrays to condense code here too
2012-09-30 17:33:34 +01:00
Matt Pass
a2f8d9bc43 Combo moveLine function & code condensing
moveLine(dir) func added as combo of moveLineUp and moveLineDown funcs
Move initialising vars to start of func
Used indexOf to check array for shortURL instead of for loop in 2 places
Improving/removing a few comments
Condensed code to now check if selectedFiles is empty or contains right
clicked file and also condensed code to use indexOf on array instead of
for loop
Don't need foundFile because of this condensing
Using ICEcoder ref for filesFrame and also showing dropdown higher up
(next to mouse pointer/inline with file/folder name)
2012-09-30 16:24:03 +01:00
Matt Pass
80d717b4dc Condensing code & new deselectAllFiles func
Syntax format improvements on fileManager function
selectFileFolder improvements:
- Removed a load of vars we no longer need & new tgtFile var added
- 2 x areas where we deselect files/folders now done via new function
- tgtFile now avail to avoid duplicate setup
- Other much more efficient and clearer processes setup to achieve same
result
New function added to deselect all files
Ternary shortening on colouring of selected/deselected files & folders
Swapped var order around
2012-09-30 14:55:59 +01:00
Matt Pass
e14a8df6a0 Check typeof parent and swap vars around
Checking state.curState.context can cause issues is state.curState
doesn't exist so just check state.curState instead
Swapped a couple of vars round to match order of usage in func
2012-09-29 17:15:09 +01:00
Matt Pass
4be0067852 htmlTagArray defined in top settings now
updateNestingIndicator now setup on a setInterval every 30 ms
(This is due to timing issues and solves this without being noticable)
Only if we have a context for the given tag build up the array
If so, reset htmlTagArray and build up the array again
This means we stick with the old array if we're in a script or style
block (for example)
Set the tagString to be the last item in the array
If caretLocType is JS, set the tagString to script
(This is because CodeMirror doesn't recognise this as a tag)
updateNestingIndicator now works by:
- checking if we have a cM instance and not in JS, Coffee etc filetypes
- gets token information for the very end of the document
- detects if it's className is an error or not to determin if the
nesting is broken
Fix to detecting the code type we're in as without -1, JavaScript is
ignored as it's array item 0
2012-09-29 17:02:30 +01:00
Matt Pass
30a97ed4db Using indexOf to check nestTagExceptions
No need to use for loop here, instead use indexOf to check tagString is
an array item within nestTagExceptions
2012-09-29 16:47:30 +01:00
Matt Pass
1257ed0174 New ICErepo logo
Lost the standard Octocat logo in favour of this one
2012-09-29 11:43:19 +01:00
Matt Pass
c717dd7bba Revised version to establish htmlTagArray
Uses a method from Marijn Haverbeke to establish an array of nested
tokens
This means chars in the document don't need to be scanned and the array
worked out in a more complex way
It means quite a few lines can be condensed down to just 3
Also means it's far less expensive on the CPU, meaning there is no
sluggishness onCursorActivity on large documents (ie typing etc)
2012-09-28 17:35:42 +01:00
Matt Pass
e0a7893578 Highlight line on moving up/down
No longer setting the cursor ch position on moving line up/down
Instead now highlighting the line that has been moved
This is done via the new function highlightLine
2012-09-28 07:52:33 +01:00
Matt Pass
6df5adf0f1 Deselect file we're closing in the file manager 2012-09-27 18:07:11 +01:00
Matt Pass
7e773e5d0a Go back to hiding code editor till loaded
Shows as a white block until loaded, so go back to having it's
visibility hidden until we're loaded and then show
2012-09-21 14:23:29 +01:00
Matt Pass
c3dbc4187f Remove iceRoot from location & perms file path
Clear iceRoot from the beginning of location (needed for when you set
your own ICEroot), so it doesn't cause DOM ID issues/mismatches
Also remove it from the file path passed through to file-control when
changing perms when you have your own ICEroot and don't show in server
message either
2012-09-21 14:22:14 +01:00
Matt Pass
6c004c3010 Remove ICEroot from path
This is applied in file control and by not removing it we have 2 x dirs
2012-09-21 09:25:58 +01:00
Matt Pass
96054295a0 Condensing code in a few areas
Reworked detecting if it's a JS, CoffeeScript, Ruby, CSS or LESS file by
switching the indexOf around
Also performed indexOf on an array rather than looking at each array
item in a for loop
Ternary shortening of code in a few areas
2012-09-20 18:15:20 +01:00
Matt Pass
640c0e9c4a Input field glow updates
Blue glow on input fields now set to 100% opacity, instead of 70%, was a
bit weak before
Also now showing on go to line input field
2012-09-20 09:41:21 +01:00
Matt Pass
ce04ef36da setLayout on creating new tab
Won't have height set on the editor instance otherwise
2012-09-20 09:29:16 +01:00
Matt Pass
677e90ed6b Condensing PHP code into 1 echo 2012-09-20 09:25:16 +01:00
Matt Pass
c2fcdd6b9f Version 0.8.6 2012-09-20 00:13:48 +01:00
Matt Pass
d89cd59c8b Title tag alts, code condensing & tweaks
Version number now in title tag text
Tidied up some comment text re whats included in
codemirror-compressed.js
No longer relying on PHP to echo HTML as much
Code folding vars renamed to codeFoldTag and codeFoldBrace
A new var also set up to define the style of the + that appears in the
gutter
Also some fixes to the + symbol which was overlapping numbers & wrapping
badly
This var is used by both codeFoldTag and codeFoldBrace to set + styling
Formatting of code in creating CM instances
Pulling thisCM through on onCursorActivity and onKeyEvent
This is so we have an object which we can use instead of much more code,
doing it the easier way
2012-09-20 00:13:08 +01:00
Matt Pass
ae0d933588 Title tag changed & simpler code
Title tag text changed to match other files
Decided to drop setting bannedFiles in the ICEcoder array to match
session based version
Checking against the session based version now
Ternary formatting just for ease of reading
Root list item now created mostly without PHP echos
Just echoing now rather than building up a var to echo
2012-09-19 23:56:49 +01:00
Matt Pass
15a092ce87 Title tag text alt & better textarea text buildup
Tweaked title tag text to match other files
Outputting plugin text using implode, which makes for much less code
2012-09-19 23:51:51 +01:00
Matt Pass
e23fc7d15a Removed trailing spaces & semicolons
Also moved position to front of progressBar
2012-09-19 23:48:11 +01:00
Matt Pass
0c07937d45 ICEcoder added as folder to exclude 2012-09-19 23:46:29 +01:00
Matt Pass
2694a06876 onLoad clear load screen, ternary shortening
Now clears load screen when this is loaded
Ternary statements shortened even further in 3 areas
2012-09-19 23:45:51 +01:00
Matt Pass
66ca709da9 title tag text tweak only 2012-09-19 23:44:35 +01:00
Matt Pass
a01d770044 Condensing JS and PHP syntax format tweaks
Multiple JS lines condensed into fewer, action also placed before
message
Couple of PHP if else statements changed to ternary
2012-09-19 23:44:04 +01:00
Matt Pass
bdfa5b6141 Removed unused classes, condensed others
Removed PDF, SQL, SWF and XML, not supporting these in v1
HTML, Jpeg & Ruby condensed, plus dropped RBX and RHTML
2012-09-19 23:40:53 +01:00
Matt Pass
0d9116b9dc Syntax, format & wording tweaks only 2012-09-19 23:39:15 +01:00
Matt Pass
5c8f11bfe3 Remove trailing semicolons 2012-09-19 23:37:31 +01:00
Matt Pass
a32f04a4e3 Show load screen while waiting for multi results
Set visibility to visible until multiple-results.php has loaded
2012-09-19 23:36:46 +01:00
Matt Pass
133317efdb return false onContextMenu on DOM elems 2012-09-19 23:35:14 +01:00
Matt Pass
58f8834041 Hex code shortening 2012-09-19 23:33:58 +01:00
Matt Pass
71ff5d3058 Refresh message & no need to change visibility
Ended config.php write problem messages with 'and press refresh'
No need to set visibility on load anymore as we can only see if logged
in, so should be visible anyway
Removed tabs from login & set password screen (gives clue it's in an if
condition)
2012-09-19 20:45:22 +01:00
Matt Pass
fb82fcdb20 Not hidden by default
Can always be show as we can only see if logged in
2012-09-19 20:42:37 +01:00
Matt Pass
3837e18af2 No need to decode as it's not URI encoded 2012-09-19 20:41:59 +01:00
Matt Pass
c4a431bd2f Upgrade to CodeMirror 2.34 2012-09-19 17:59:29 +01:00
Matt Pass
9ff868a2d4 Upgrade to CodeMirror 2.34 2012-09-19 17:57:38 +01:00
Matt Pass
7a44e5db9a Removed CodeMirror 2.33
Upgrade to 2.34
2012-09-19 17:57:11 +01:00
Matt Pass
9ec77d62cc newTab needs 5px padding at bottom not 1px 2012-09-19 17:38:11 +01:00
Matt Pass
fd974c7bb7 Removed restrictedFile, DOM ready update & tweak
You cannot get access to ICEcoder unless you have logged in, so
restrictedFiles is not needed anymore
Removed it and all instances of it's usage
Only updating pluginsContainer if it's a DOM elem
Change title tag of login/set password screen conditionally
2012-09-19 17:29:10 +01:00
Matt Pass
ed0bad79ad Merge branch 'temp'
Conflicts:
	lib/settings.php

Fixing stupid Github problems
2012-09-19 09:42:57 +01:00
Matt Pass
021a217f2c Version 0.8.5 2012-09-19 09:15:39 +01:00
Matt Pass
0c2ab575a1 Error with Github here, actual change is line 180
Line 180 checks if pluginsContainer exists and if so, sets the innerHTML
2012-09-19 09:14:49 +01:00
Matt Pass
338ca3bb24 if loggedIn conditions removed
User cannot view this file if not logged in, so not logged in handling
no longer needed
2012-09-19 09:10:08 +01:00
Matt Pass
7c718b5131 accountLogin and login related items removed
accountLogin removed as an aliasArray to create
login param not needed on init function
Remove the if & else condition depending on login, this is not done here
anymore
No need to set login, not there anymore
refreshFileManager no longer needs to take action on logging in, user
would already be logged in
2012-09-19 09:02:14 +01:00
Matt Pass
cbeb595f48 if loggedIn condition removed
You cannot view this file if not logged in, so no need to check again
2012-09-19 08:59:08 +01:00
Matt Pass
293d3aa259 Classes removed for login area 2012-09-19 08:55:19 +01:00
Matt Pass
21d1c1f9ba No longer need login area
Logging in now done on seperate screen not here
2012-09-19 08:54:51 +01:00
Matt Pass
ef6bf6e4df Removing of if condition regarding loggedIn
You can only view this file if logged in now, do no need for if or if
else conditions
2012-09-19 08:44:11 +01:00
Matt Pass
aa6cfcc76e No need for if condition here
Removed if checks and else conditions in a couple of places
2012-09-19 08:42:11 +01:00
Matt Pass
924919fb6f No need for if condition now
You can only see multiple results if logged in, so no need for this if
condition
2012-09-19 08:40:37 +01:00
Matt Pass
15b4793d32 bannedFiles changed
Now just hide _coder and ICEcoder folders to hide ICEcoder itself from
the file manager
Users can now see everything else
2012-09-19 08:38:55 +01:00
Matt Pass
22a1305cb1 Cannot view if not logged in
No need to check for loggedIn anymore, you simply cannout view this page
if not logged in
Removed login param from init() function call
2012-09-19 08:35:43 +01:00
Matt Pass
7c3cc891f3 Remove if condition
No longer showing ICEcoder if we're not logged in, so no need for if
else
2012-09-19 08:33:47 +01:00
Matt Pass
158e03b5fd Reworked, so no login, no access to anything
Big set of changes so that you only see a login screen until you're
logged in
Upon receiving a good login password attempt, also now immeditaley
redirect after setting session var
Rearranged a few chunks of code to logically make more sense
SImplified quite a few things by condensing code
Now shows a login/set password screen
Prior to showing this though, if we're setting a password and once
hasn't been set yet, do that and redirect
If we're not logged in or don't have a password plus not on the settings
file, redirect to that to login or set password
2012-09-18 21:12:15 +01:00
Matt Pass
e2aefab2ae SESSION userLevel now loggedIn
Moving away from the idea of multiple user levels, users will either
have full access or no access
Swapped all userLevel session vars to a loggedIn var, which is a bool
Makes things simpler and paves the way towards the new login screen
(before you see any files, code etc)
2012-09-18 08:53:13 +01:00
Matt Pass
4027ecee5a Use strpos instead of strstr
Instead of just finding our dirname within the finalArray using strstr,
now using strpos and detecting if it's pos 0, which is much more
appropriate & reliable.
Example: Looking for /bob/t1.txt for may potentially return a false
positive for finding '/bob' in '/another/bob1/abc' and files therefore
t1.txt ends up in the wrong folder. This false positive only occurs when
the write order of hard drive storage has stored another/bob1/abc before
/bob and therefore retrieval load order can cause this odd, occasional
issue.
Checking for /bob being the start of our finalArray item through
strpos===0 eliminates this possibility.
2012-09-16 10:25:14 +01:00
Matt Pass
b1ca05fec3 Dynamic scoll height, undo URI encoding, use vars
resultsPane id setup. This then allows us to change the height to fill
more of the popup if we don't have replaceAll button at the bottom.
Establish findText in both PHP and JS (they need different sources for
their values unfortunately)
(JS for encoding simplicity by just using input field value and PHP to
get GET value as it can't pick up the parent input field value)
Use findText in both JS and PHP variations where appropriate
2012-09-14 18:02:45 +01:00
Matt Pass
21ef12f143 URI encoding var with ICEcoder: prefix
Don't need cM anymore
Replace apostrophes with HTML entity value
If we have something that should be URI encoded, encode it but also with
an ICEcoder: prefix, so we know we need to unencode it
2012-09-14 17:48:16 +01:00
Matt Pass
6cf1def982 Don't mess with CSS, instead use API to set size
Instead of detecting & altering stylesheets, run through CM instances
and set the size
Needs to be done via setTimeout to avoid timing issues
2012-09-13 18:16:15 +01:00
Matt Pass
2c1e032f38 Set the recommended default of h:auto & o:visible
Not that this works without a container.
Could investigate wrapping in a 100% high container instead?
2012-09-13 18:13:42 +01:00
Matt Pass
56887c9f1f Better checking of open files before loading
New isOpen function added
This receives a file ref (absolute or relative) and checks a relative,
pipe replaced version against the openFiles array
If it finds a match, the file is already open, it will return the array
position, otherwise return false
The openFile function now uses this array when attempting to open a file
It firstly checks if it's open or not, if it is, it will switch to that
tab, otherwise proceed to open it
autoOpenFiles no longer has to check for this, as it's handled by
openFile function anyway
2012-09-13 09:29:27 +01:00
Matt Pass
8715f79251 Reverting ternary statement
Not sure why the ternary version here isn't working, reverted to an if
else
2012-09-11 09:29:34 +01:00
Matt Pass
d8ff32f888 Version 0.8.4 2012-09-09 17:04:52 +01:00
Matt Pass
d0315891b7 UTF-8, ternary switching & condensing code
Added UTF-8 charset metatag
Ternary switching instead of if else
Condensing 2 if statements into 1
Removed old commented line
2012-09-09 17:03:40 +01:00
Matt Pass
a796dc2376 Condensing & improving code
Simplifying & condensing code in a number of areas
Checking for changed content using indexOf
showFileMenu function to handle continuing to show file menu
(used when moving mouse over options to stop it dissapearing)
Condensing multiple <?php ?> blocks
File manager icons now using classes rather than inline styles
Ternary if condition
2012-09-09 16:45:37 +01:00
Matt Pass
eb4cc629a3 File manager icon classes added
Instead of using inline styles
2012-09-09 16:39:57 +01:00
Matt Pass
280320ef9a Now using ICEcoder iconset & default class
Use ICEcoders default iconset to save 7kb
Adjust all CSS BG positions to match this image now
Add ext-file to handle default (unsupported) filetypes
2012-09-09 16:00:19 +01:00
Matt Pass
328ddeb46d Beautify, define filetypes & use default
Unminify for user readability, can uglify in production use
Add fileTypesArray to define supported filetypes
If we have a file without a supported filetype, use ext-file as default
2012-09-09 15:58:06 +01:00
Matt Pass
13df2cb182 Remove icons
Using ICEcoder iconset now to save bytes
2012-09-09 15:50:44 +01:00
Matt Pass
bf73a03125 Simplify building up previousFiles
Using implode to create CSV within JS array block
Added 'v ' to title tag
2012-09-08 19:50:10 +01:00
Matt Pass
8c98e13984 Version number is now numeric only
Removed 'v ' prefix from version number so it can be evaluated in
conditions easier
Hardcoded 'v ' before all places where the version number is shown
No longer need to ltrim 'v ' from the version number
2012-09-08 19:34:25 +01:00
Matt Pass
c159e9326e Now checks for updates by default 2012-09-08 19:23:43 +01:00
Matt Pass
662bd1188d ltrimming 'v ' on version num, put back in
Needed to leave the ltrimming of 'v ' from the version number, put back
in
2012-09-08 19:23:22 +01:00
Matt Pass
b3e57075de No longer trimming 'v ' & clearer syntax on cmv
The latest version number doesn't have a 'v ' prefix now
Altered the syntax when checking cmv to make it shorter & clearer
2012-09-08 19:08:18 +01:00
Matt Pass
c6a08896f0 Condensing code, UTF-8 and messages on load
Check for IP address or * in array via in_array
Shorten long vars to $icv and $cmv in checking for updates
UTF-8 char set added to head
$updateMsg set if there is a newer version and this triggered onload
2012-09-08 18:50:24 +01:00
Matt Pass
8cfe6b557c Removing spaces from 4 x CSVs before use
Before saving the values, remove spaces from CSV values provided by user
Also covering the same thing in the 4 x session arrays & arrays that are
created
2012-09-08 17:23:58 +01:00
Matt Pass
8ce1da9485 Shortening a few vars and 2 x if conditions 2012-09-08 17:15:17 +01:00
Matt Pass
c44b1689b3 Remove padlock to simplify look
No longer showing padlock next to hidden files, looks cleaner & simpler
2012-09-08 15:09:43 +01:00
Matt Pass
dcf2571437 Show found instance count
Now showing number of times our find string is found in a file
2012-09-08 15:05:30 +01:00
Matt Pass
c9aca08d4e readdir created theme array, fix to for counter
Instead of using a hardcoded array, we are now generating this from CSS
files in the CodeMirror theme folder
Need to count the array length, not 1 less than it (2 places)
2012-09-08 15:04:06 +01:00
Matt Pass
fe8486d456 Switching to use new filetypes
files-arrow.gif now .png
nav-bg-gif now .jpg x 2
2012-09-08 15:00:27 +01:00
Matt Pass
b31dc5fb16 Saved bytes by using a JPG instead of GIF 2012-09-08 14:59:11 +01:00
Matt Pass
160ee475fd Removed, no longer wanted next to files 2012-09-08 14:58:20 +01:00
Matt Pass
dca9e6a88a GIF now a PNG to save bytes, also more subtle
Mid-grey instead of white
2012-09-08 14:57:11 +01:00
Matt Pass
4172f7d157 Don't like this theme, removed 2012-09-08 14:56:06 +01:00
Matt Pass
7a2275b3fb Resaved as web version, smaller 2012-09-08 14:55:18 +01:00
Matt Pass
76ac21a92d info now readme, better & shorter description 2012-09-08 14:54:46 +01:00
Matt Pass
f21012202f Removed file, not needed
Don't need to include this in ICEcoder really
2012-09-08 14:54:08 +01:00
Matt Pass
c0eb4172a2 Version no now at v 0.8.3 2012-09-07 17:31:58 +01:00
Matt Pass
2ed832c729 Param adjust and setting up functions for process
Not refering to a number when calling replaceInFileSingle, instead set
file ref as a string param
replaceInFileSingle simply sends the fileRef and find & replace values
to the new replaceInFile function so it can begin it's process
replaceInFilesAll runs through all files in the foundArray and calls
replaceFileInSingle repeatedly with the fileRef
When it's finished running through all files, it hides the blackMask,
returning to the usual view
2012-09-07 17:31:25 +01:00
Matt Pass
bfbf84ca24 New action process added for replaceText
Upon replaceText being needed, we detect if we have a high enough
userLevel and if it's writable, if not provide an appropriate message to
the user
Otherwise - read, replace and save the new content with the find/replace
combo requested
Clear the server message and item from the queue
2012-09-07 17:25:56 +01:00
Matt Pass
5747825c14 replaceInFile function added
New function added which takes 3 params for fileRef, find & replace
Adds a new job to the server queue with an action of replaceText and the
3 params
Also adds a serverMessage
2012-09-07 17:21:55 +01:00
Matt Pass
67cbc08b60 Don't autoload files that are already open
Check if files are already opened and if so, skip autoloading it
2012-09-07 07:09:16 +01:00
Matt Pass
be0c8088ce Make ICEcoder avail in PHPGrey, check res & ban
Make global ICEcoder var avail to be used in PHPGrep function
If the user isn't logged in, check if the file we're considering showing
is a restricted file and if so set rFile = true
Syntax fixed - swapped strpos params round (needle, haystack)
2012-09-07 07:09:00 +01:00
Matt Pass
c36b7d842d iceRoot & docRoot set if level 10
Available for use if user is logged in
2012-09-07 07:08:42 +01:00
Matt Pass
74534641aa Extra param on webkitRequestFullScreen needed
Text input fields in fullscreen mode wouldn't allow alphanum chars. You
need this extra param to make that work OK.
2012-08-30 18:02:41 +01:00
Matt Pass
f7e1ce7b50 Find in files done, replace in files half done
Now detects if we're finding in filenames, files or otherwise, open docs
Extra else condition to handle finding in files
Uses a Grep like technique to recursively find in files and build up a
string
(Need to get the exclusion of restricted and banned files working)
It then displays the results in the results display DIV once we have a
list build up
File paths are dropped into foundArray
These can then be used by 2 x new functions to replace and replace all
(This final part is to be done)
2012-08-30 08:03:40 +01:00
Matt Pass
dab73a3eb2 zip is now a restricted file
Incase it has contents where you don't want to give public access
2012-08-30 07:59:13 +01:00
Matt Pass
24fe2bb81e serverType defined in settings and in a beter way
Instead of detecting a : in the path, now detect by server software name
This is now being done in settings file so it can be used elsewhere too
2012-08-30 07:58:07 +01:00
Matt Pass
1cd1529e28 Dochub icon and plugin ref added 2012-08-29 10:19:17 +01:00
Matt Pass
72386c94a9 Fix to selecting char range 2012-08-28 07:50:55 +01:00
Matt Pass
262efb40bb CodeMirror 2.33 upgrade and v0.8.2 2012-08-27 16:02:54 +01:00
Matt Pass
85dfe6f5fa CodeMirror 2.33 added
Upgrade from 2.32
2012-08-27 16:02:32 +01:00
Matt Pass
53cee56a9d CodeMirror 2.32 removed
Upgrade to 2.33
2012-08-27 16:02:16 +01:00
Matt Pass
76224c40fe ICErepo plugin added
Not quite finished yet, but an early version added for use
2012-08-27 16:01:58 +01:00
Matt Pass
f12b4914e6 Ambiance theme removed
Couldn't justify 26kb when all other themes are 1-3kb
2012-08-27 16:01:38 +01:00
Matt Pass
989b0a602d Remove font size from theme
Should be set in CodeMirror class if different font-sizes are wanted
2012-08-15 11:35:42 +01:00
Matt Pass
7664f1ea74 Ignore _coder and ICEcoder dirs 2012-08-05 15:36:20 +01:00
Matt Pass
1d3d5fa56b Version number update to v 0.8.1 2012-08-05 15:32:31 +01:00
Matt Pass
f69edba862 Set the activeLineBG colour on theme choice
#ccc for light BG themes, #000 for dark themes
2012-08-05 15:24:08 +01:00
Matt Pass
20bd4d81ec Conditional activeLineBG color
activeLineBG color is #ccc for Eclipse, Elegant and Neat themes #000 for
all others
Set the default text color as #000 so Eclipse, Elegant and Neat themes
display fine
2012-08-05 15:22:50 +01:00
Matt Pass
aeac737c84 Set color #000 as default in CodeMirror class
Means the Eclipse, Elegant and Neat themes display OK
2012-08-05 15:20:07 +01:00
Matt Pass
bea1afc01c 6 new shortcuts added
New shortcuts added for next/previous tab, move line up/down, new tab
and close tab
switchTab function now accepts a noFocus param to stop focusing on the
document
Fix to set the visibility on the content area when starting a new tab,
wasn't showing otherwise
Functions added for nextTab, previousTab, moveLineUp and moveLineDown
(Other 2 functions newTab & closeTab already exist)
helpScreen taller to accomodate the 6 new shortcuts
2012-08-05 14:32:30 +01:00
Matt Pass
8cbc5d79d4 Overriding CTRL+Up & Down 2012-08-05 14:18:49 +01:00
Matt Pass
d51f050d6e 6 new shortcuts added
Shortcut info added for move line up/down, new/previous tab, new tab &
close current tab
Minor text adjustment to heading
2012-08-05 14:18:07 +01:00
Matt Pass
b485e1ce4e Icons moved/renamed and ICErepo plugin added
Adminer & Zip-It! have their icons renamed to icon.png now, URLs to them
have changed.
Also renamed the title for Adminer to this
New plugin icon added for ICErepo as a placeholder
Minor CSS adjustments
2012-08-03 13:06:36 +01:00
Matt Pass
5de12ce651 ICErepo plugin placeholder added
Some basic info and link to ICErepo project on Github
Icon also added for this plugin
2012-08-03 13:04:38 +01:00
Matt Pass
2d455a2fcf Icons for Adminer & Zip-It moved & renamed
Renamed icons to icons.png and placed directly in the relevant plugin
folder
This means they're more isolated and have easier distribution, setup etc
2012-08-03 13:01:20 +01:00
Matt Pass
7b5f5ae5ce Reset progress bar to 0% on reshowing load screen
Move webkit & moz animation CSS declarations to the style attribute on
progressBar span
Give the span an ID and on showing the loadingMask again, clear the
declaration
4ms later start it again so it starts from 0% again
2012-08-02 15:29:53 +01:00
Matt Pass
853981b3b0 Graceful & discreet reload on not being ready
If for some reason the createNewCMInstance function isn't ready &
available, reload the iframe containing file-control.php which works
with the issue by giving more time and leave a note in the console.log.
Also move everything to do with the the loading process into the
successful part of the if condition.
2012-08-02 13:45:02 +01:00
Matt Pass
2449a059f0 Set layout on load and apply everything in 4ms
Redo layout on loading of file to avoid occassional broken layout issues
Wrap all load processes in a 4ms timeout to avoid DOM & JS availability
errors
2012-08-02 10:38:19 +01:00
Matt Pass
d1e2cf4850 Only apply height if we have the stylesheet
Check for cMCSS first before changing CSS height property
2012-08-02 10:36:10 +01:00
Matt Pass
e89a80ea1a Version no update to v0.8.0 2012-08-02 07:48:29 +01:00
Matt Pass
ef44be8240 fileLoc defined by saveType, error catching no /
If we're saving a new file, fileLoc is the file location otherwise it's
empty
Error catching given filenames not beginning with a / by prefixing with
one
2012-08-02 07:43:57 +01:00
Matt Pass
81fc8495b2 openFiles array fixes
renameTab now targets the right array position (tabNum-1)
updateFileManager now adds a / in to the files path ref
2012-08-02 07:40:58 +01:00
Matt Pass
3dc7c62559 Another huge path realignment & many improvements
No need to conditionally define $file on action/contents
$file is now either existing or new filename
Converted to fullpath and fileLoc and fileName established from this
Extension checking on fileName now not full path ($file)
Variable reassignment, fileName now used much more
Path realignments in many areas
Big chunks of code removed, simplified or made singularly available
Better error handling & code optimisation/shortening
2012-08-01 20:28:57 +01:00
Matt Pass
41e99372f7 Adding / for root location and on span 2012-08-01 20:16:30 +01:00
Matt Pass
9ac6ce909d Huge path realignments
Now making $file the common filename (instead of $saveFile)
This is changed to a full path now as we receive a relative path
$fileName and $fileLoc chunks worked out from this
isset catching on newFileName before looking at value
Renaming the tab on saving new file
htmlentities wrapped around loaded file on overwrite collision
Not giving away fullpath info on unwritable files if we're not logged
Conditional getInput dialog prompt
Simplified code in quite a few areas
2012-08-01 07:58:38 +01:00
Matt Pass
9eebbc011e Path relaignment, no href and perms ID updating
Replacing pipes with slashes in oldName
Not setting href on a tag to stop snapping to top
Path references should be location + "/" + file (or pipe)
Also updating perms ID ref
2012-08-01 07:35:41 +01:00
Matt Pass
8c62d3eb28 No longer using href="#"
This is to stop the iframe snapping to the top when clicked on.
2012-08-01 07:07:21 +01:00
Matt Pass
7576511841 Passing relative not absolute path
No longer passing the full path to th chmod function, now just the
relative path
2012-08-01 07:05:56 +01:00
Matt Pass
58423bfd18 CSS on a tags in fileManager now have pointer
As I'm no longer setting "#" on the href tag (was snapping to top of
iframe)
2012-08-01 07:04:58 +01:00
Matt Pass
aae759c901 Path fixes, setting new file openFiles value
On adding a new file, need to also set the openFiles array value to
match the newly given filename
2012-07-30 17:28:27 +01:00
Matt Pass
4fe333e335 Dropped Opera support & removed some prefixes
Dropped all Opera related -o prefixes as I'm not supporting Opera now.
Too few users, too many headaches.
-webkit & -moz box-shadow prefixed versions removed now box-shadow can
be used by itself
2012-07-30 17:21:31 +01:00
Matt Pass
7634f9c6d5 Path tweaks to fix errors & correct perms shown
No need to add add / to end of getInput dialog default
Double // replaced with / in error catching
Correct perms shown on update of file manager; 705 on folders, 644 on
files
if condition block tabbed to right depth, for syntax clarity only
2012-07-30 13:13:35 +01:00
Matt Pass
6dd7c4abeb New folder perms now 705 & replacing //
Newly created folders no have 705 perms and / is r'trimmed from docRoot
(as iceRoot is prefixed with a /)
The short URL used in getInput prompt dialog now has // replaced with /
to error catch
2012-07-30 13:09:01 +01:00
Matt Pass
f1aa201425 Realigned and reworked adding & removing files
Due to new DOM structure and relative paths how we add new files &
folders, including how they're added into empty folders has been
realigned and reworked.
2012-07-30 07:56:06 +01:00
Matt Pass
964449660d Send docRoot relative path var back to function
Was previously passing back the full path to updateFileManagerList. Now
removing the docRoot portion and so now passing back a relative path.
Removed old shortURL starts substr, no longer needed.
2012-07-30 07:53:48 +01:00
Matt Pass
5b3af56bd8 Remove new line after span
To keep DOM structure simple and tie in with JS manipulations
2012-07-30 07:50:47 +01:00
Matt Pass
4c1acb8206 All icons now DIVs not images
About the same amount of code needed but now using a single PNG
spritesheet which gives about a 5k saving over seperate files.
2012-07-29 14:05:23 +01:00
Matt Pass
a9dd713809 minFilesW adjustment & not setting account
minFilesW should be 14px not 15px (could just about see edge of icons)
Not setting account width. Wasn't really necessary and caused icons to
collapse into smaller space when file manager reduced in width.
2012-07-29 14:02:25 +01:00
Matt Pass
d67c25aab5 Ternary shortening & other optimisation
Ternary statements shortened where possible
Account now has it's width set too when setting layout
fmLock now moved into another DIV container, adjust marginLeft value
No need to add last argument to substr as we want up to the end
Few hex codes shortened
2012-07-29 13:51:39 +01:00
Matt Pass
7a0f8c5d98 Spritesheets now used for file manager
Instead of using seperate files, there is now one pNG spritesheet and
these CSS updates to show icons within DIV containers, just as per the
filetype icons in the file manager. Result has been about 5k of bytes
saved.
Lock class removed, now a DIV like the other icons.
2012-07-29 12:58:26 +01:00
Matt Pass
46cd326f09 Using PNG now instead of GIF
Gif file removed, now just a PNG is needed
2012-07-29 12:55:56 +01:00
Matt Pass
08898a7334 Newly named file
Now file-folder-icons.png instead of the previously named
file-manager-icons.png. This is because that filename is now taken by a
new file for the save, open etc icons.
2012-07-29 12:54:35 +01:00
Matt Pass
f2facff418 Refresh icon now using DIV & CSS spritesheet
Also has title now like other files & icons
Files/folders now now use file-folder-icons.png for icons
2012-07-29 12:53:18 +01:00
Matt Pass
ef55c48dd1 File manager icons now in 1 PNG
Individual PNG file icons placed into single PNG,
file-manager-icons.png. Much like how the icons are shown for filetypes,
this uses a stylesheet to show the icon within a DIV container's BG.
Result is a few kilobytes saved and having all icons in 1 file.

Padlock.png kept as a single PNG for now as used against restricted
files/folders. May use the same DIV CSS stylesheet technique in future.
2012-07-29 12:49:24 +01:00
Matt Pass
f9411f0500 Removed BIRME plugin, upgraded Adminer
BIRME (Batch Image Resizing Made Easy) plugin link removed as I never
use this and it's not exactly dev related. Icon removed too.
Adminer upgraded to 3.4.0.
2012-07-29 12:45:22 +01:00
Matt Pass
26e54dc2a2 No longer need .gif version, use .png 2012-07-29 12:43:10 +01:00
Matt Pass
a6891e1817 Upgrade to newer version of Adminer
Version update from 3.3.3 to 3.4.0, saving of 5k too!
2012-07-29 12:41:07 +01:00
Matt Pass
de35d2fe15 Wrapped htmlentities around $loadedFile
Stops conversion of entities such as &amp; to &. Obviously we want it to
be exactly the same as the loaded file and this should ensure that is
the case.
2012-07-28 13:47:41 +01:00
Matt Pass
eeffd207be docRoot being passed in, delimiting on asterisk
Recently started using $docRoot in place of the $_SERVER version but
this var isn't available within the class. Now being passed in so it can
be used.

Also now exploding the exclude list on asterisk rather than comma to
avoid problems elsewhere.
2012-07-28 13:20:02 +01:00
Matt Pass
047daf4e44 ZipIt plugin reintegrated with error corrected
The exclude value in the URL's querystring had a list of exclude items
previously seperated by comma. However, we're exploding the whole plugin
by commas and because of this, the exclude list ended up becoming
subsequent array values, getting caught up in the mix.

This in turn caused 1000's of errors p/s as it ended up with a NaN value
which ended up as 0 (or -1)? and a very very quick, erroneous
setInterval.

Now delimiting by asterisks which looks neater, makes more sense
visually and solves the problem. Commas now only seperate the 6 array
values.
2012-07-28 13:17:38 +01:00
Matt Pass
b0012bee27 Value not in rtrim but not needed anyway 2012-07-27 13:56:21 +01:00
Matt Pass
f81ea9fe57 settings include,
Inclusion of settings.php moved to start to be like other PHP files
docRoot replaces $_SERVER equivalent
$path now gone in favour of specifying the file path chunks we need
Simplification in a few areas that previously used $path
Other areas of code also simplified for clarity
All file refs (links, ids etc) now relaitive to doc root. This means
less code and doesn't expose full server paths which is a good security
tweak.
2012-07-27 12:17:39 +01:00
Matt Pass
5f5ebd12a4 shortURLStarts gone, close highlights & tweaks
Have removed shortURLStarts from everywhere, too problematic
Close button highlights on mouse hover
File refs used client side are relative/local now
(Means less messing with strings and better security)
fullPath now also gone for same reason
2012-07-27 12:10:47 +01:00
Matt Pass
a63b9e3ff4 Many session & setting tweaks & simplication
Only start a session if we haven't yet got a session object
(Avoids warnings from PHP)
Define our settingsFile, used in many places now
serverRoot gone, no longer needed (this is now docRoot)
Specify versionNo, codeMirrorDir & cMThisVer here now
(This means we don't overwrite users config settings each time we change
version no and they pull from Github, overwriting all their settings)
These 3 vars prefixed to the ICEcoder settings array
settingsNew now created from array & for loop, much simpler
Same for 4 session vars, created in similar way
docRoot & iceRoot now defined here
(As settings.php is loaded by just about every PHP file, they are now
available everywhere)
These, plus user level, security vars, IP address code moved to all be
together
settingsContents 1 & 2 now just settingsContents
saved files in previousFiles & last10Files now docRoot prefixed, making
them full paths to files
Clearer wording & other minor tweaks
2012-07-27 12:05:37 +01:00
Matt Pass
d256b35a67 file & root alts, shortURLStarts gone & onLoad
docRoot defined in settings.php now so no need to set
docRoot swapped for iceRoot in a few areas (there were kind of one and
the same before, ugghh)
Conditionally prefix file refs with $docRoot and/or $iceRoot if
different paths are needed
Removed shortURLStarts - too inefficient & problematic
Only on winow load begin to createNewCMInstance
(In the rare case the files frame loads before the editor frame)
Code simplified in a few areas
2012-07-27 11:52:40 +01:00
Matt Pass
a3e553c04f root not prefixed any more
As root is not prefixed with the doc root anymore no need to replace
Better wording in title tag
2012-07-27 11:43:42 +01:00
Matt Pass
dadf055a54 settings tweaks, fullPath alts & clearer wording
Now loading settings.php rather than config.php so we can use vars such
as docRoot
Using docRoot rather than the $_SERVER version
ICEcoder root now shows full path rather than just root portion
fullPath no longer needed in JS clickable link
As full paths are passed through, remove this from displaying to user
(So they get a doc root relative version)
Clearer wording in a few areas
2012-07-27 11:42:31 +01:00
Matt Pass
8d2f7da823 shortening to use docRoot
Now using docRoot var to simplify things
Version no change & note on keepLastDays
2012-07-27 11:34:37 +01:00
Matt Pass
61a6c86ae2 fullPath replaced by docRoot
fullPath is replaced by docRoot in the JS link to open file
(Means it's accessable from any file tree root now as it's a full path)
No need to prefix on fileRef
Minor text tweak
2012-07-27 11:33:33 +01:00
Matt Pass
2c958deebf Realigning fileName, serverRoot is now docRoot
fileName is now prefixed with docRoot & iceRoot
Means we accept relative paths and prefix server side
serverRoot is now docRoot
2012-07-27 11:31:58 +01:00
Matt Pass
0b4871c299 3 x vars gone, now iceRoot instead
shortURLStarts now gone, was very ineffecient to use
basePath gone also gone, not needed
fullPath is now iceRoot, clerarer name to use
No need to substr in rightClickedFile
Minor text tweaks
2012-07-27 11:30:21 +01:00
Matt Pass
1fa86272d6 version nos moved, root change & ZipIt removed
versionNo, codeMirrorDir & cMThisVer now moved to settings.php
These 3 settings are prefixed to array after initiated
This means this file doesn't need to get updated each time there is a
version no change. This in turn means that user settings aren't
overwritten each time a release made and pulled from Github
root setting is now the relative path from the doc root only, not
prefixed by it (ie, full path)
ZipIt plugin removed until I figure out the issues with it after
changing settings via settings screen
2012-07-27 11:26:14 +01:00
Matt Pass
97f430b2b7 shortURL changes
shortURL is now basePath with shortURLStarts conditionally removed from
start
2012-07-25 19:10:08 +01:00
Matt Pass
9c6be944fc Conditional file highlighting, custom path tweaks
Now only highlight files in File Manager if link exists
shortURL is now basePath conditionally with shortURLStarts removed from
start also
Files stored in config.php are now full paths
(So autoOpenFiles function now no longer needs to prefix this)
2012-07-25 19:09:05 +01:00
Matt Pass
f04cdad89d basePath variable
To define the document root level of the server
2012-07-25 19:00:15 +01:00
Matt Pass
862777f067 New var to define if we are OK to open last files 2012-07-25 17:44:00 +01:00
Matt Pass
4eb6ffc618 openLastFiles triggering & cursor error catching
openLastFiles function now triggered from:
init (this is for reloads of the browser) and
refreshFileManager (for logins)
Also now only changing cursor if we have iFrames in DOM
2012-07-25 17:43:35 +01:00
Matt Pass
b75118b4c2 Set previous files array on login
Also don't trigger autoOpenFiles() here
(Triggering in 2 other places in coder.js now)
2012-07-25 17:40:08 +01:00
Matt Pass
529f7198b1 replace indexOf with lastIndex on shortURLstarts
causes probs if you have the same term more than once in your path
(ie, var/www/mysite/www), previously took first www
Now takes last one and solves path issues in quite a few areas
2012-07-24 13:41:08 +01:00
Matt Pass
5d08a963d5 Fix to ternary statement
Was causing probs so reverted to standard if statement for now
2012-07-24 13:38:57 +01:00
Matt Pass
0ee2193b3c v0.7.9 and upgrade to CodeMirror 2.32 2012-07-24 07:25:18 +01:00
Matt Pass
e6bc582e16 v0.92, set perms before del & unlink fix
set 0777 perms on the file before deleting
$entry needs to be $backup
2012-07-24 07:24:45 +01:00
Matt Pass
6d23133101 Upgrade to CodeMirror 2.32
IE fix on linewrapping bug
2012-07-24 07:23:16 +01:00
Matt Pass
11c3d77513 Remove CodeMirror 2.31
Updating to 2.32
2012-07-24 07:22:33 +01:00
Matt Pass
d9baa76804 ZipIt now backs up every 30 mins and dels >7 days
Now backs up every 30 mins instead of 10 mins
New var defining no of days to keep
Location & filename now seperate params
keepLastDays var passed through as well now
This is used when scanning backups dir
Any files older than this no of days removed
All zip files created are perm 777 now so you can manually delete
2012-07-23 08:06:15 +01:00
Matt Pass
88cd0996ec Alter top CSS property to be 10px now not 80px
Because X & Y positions now picked up in iFrames
The top pos doesn't need so much added to it
2012-07-22 19:10:14 +01:00
Matt Pass
93726f9bb3 No need for note now in settings screen
Users can now update in settings screen
2012-07-22 17:35:37 +01:00
Matt Pass
fb7eccee3d Can now update root value in ICEcoder array 2012-07-22 17:33:01 +01:00
Matt Pass
7fb596a744 Syntax error on ternary false condition 2012-07-22 17:30:48 +01:00
Matt Pass
ab43714359 full now ICEcoder root 2012-07-22 17:26:53 +01:00
Matt Pass
4928b0087e New file manager root setting & slight shuffle
Tab width now next to theme dropdown
Slight adjustments to sizes & layout to accomodate new option
Option for file manager root also added
CSS for plugins textarea not as high, also auto overflow
2012-07-22 17:25:24 +01:00
Matt Pass
9d23e4cfba if condition checks for node existence first 2012-07-22 17:17:13 +01:00
Matt Pass
57fd479a9c Editor now 100% h+w using CSS, JS only on height
Width and height now 100% rather then 100px
This is to avoid occasional issues with non resizing on login
No longer setting the width, no need
(Could also leave the height to 100% but it's only as high as the no of
lines in the document, looks a bit weird)
2012-07-21 14:11:12 +01:00
mattpass
91e30ef9bd Merge pull request #66 from martinhbramwell/patch-1
Declare vars before adding values to avoid PHP notice errors
2012-07-20 13:04:40 -07:00
Martin 'Hasan' Bramwell
8af42aa7ac To fix https://github.com/mattpass/ICEcoder/issues/65 2012-07-20 14:18:19 -05:00
Matt Pass
b9921e155b Backups folder added, text file as a placeholder
Small text file added to this folder giving info on ZipIt backups
Wanted the backups folder in the repo as standard
Added note to readme file to mention adding perms on this folder too
(Saves asking users to give perms on parent ICEcoder dir
2012-07-20 17:54:37 +01:00
Matt Pass
d7ed877ebd Added note about setting perms on backups folder
Used by ZipIt and unable to save backups if it can't create the folder
in the first place
2012-07-20 17:52:25 +01:00
Matt Pass
436630b5c8 Now using CodeMirror 2.31 & new root setting
Upgraded Codemirror from 2.3 to 2.31
New setting in ICEcoder array, root which defines the tree root
2012-07-20 17:48:17 +01:00
Matt Pass
5d2edc911d serverRoot, ternary shortening & using tree root
docRoot is now serverRoot here
Ternary shortening in quite a few areas
Using user defined tree root now instead of document root
2012-07-20 17:45:19 +01:00
Matt Pass
f0dcf68f8f Ternary shortening on 3 x areas 2012-07-20 17:31:30 +01:00
Matt Pass
caca296562 Ternary shortening htmlTagArray & getcMInstance
Reduced & simplified code to get the same result
2012-07-20 17:30:27 +01:00
Matt Pass
948978b5e1 docRoot is now the tree root, simplified saveFile 2012-07-20 17:25:51 +01:00
Matt Pass
a1c7a54172 docRoot now serverRoot here & ternary shortening 2012-07-20 17:18:10 +01:00
Matt Pass
38254f51d1 Combined CM libs, ternary statement & root info
3 x util libs (foldcode, searchcursor & match-highlighter) now in
codemirror-compressed.js
(this means less files and saves around 7k of data)
Ternary statement now used to specify theme CSS file
ICEcoder root shown which is the file manager tree root
2012-07-20 17:16:10 +01:00
Matt Pass
fe8c94bb90 Shortened 2 ternary conditions 2012-07-20 17:02:02 +01:00
Matt Pass
891aff80ed Shoter ternary statements, fullPath = serverRoot
Simpler statements now for a couple of ternary conditions
fullPath in JS is now serverRoot in PHP
(So you can define your own tree root)
2012-07-20 16:56:09 +01:00
Matt Pass
cfa77ab0a4 Clarifying code & using configurable root
Couple of ternary conditions shortened
$path equals a new ICEcoder setting which defines the FM tree root
(Means you can set your own tree root now!)
Broke long echo statement into seperate lines
Shows root name or [ROOT] if it's the server root
2012-07-20 16:53:56 +01:00
Matt Pass
7ecbc2c407 Upgrade to CodeMirror 2.31 & More Compression
CodeMirror upgraded from 2.3 to 2.31
3 x util JS libs now included in codemirror-compression.js
Means we no longer need /util folder and 3 x files in it
Also saves around 7k in filesize
2012-07-20 16:42:13 +01:00
Matt Pass
f185438b08 Remove CodeMirror 2.3
Upgrading to 2.31
2012-07-20 16:40:16 +01:00
Matt Pass
d413370104 Handling the ignoring of .. path differently
No longer using rtrim
Added as new condition in if statement
2012-07-20 07:49:07 +01:00
Matt Pass
2b54b192ed 'Zipping Files' is now the message
Removed 'open' from server message
(as we're zipping more than just open files now)
2012-07-20 07:47:20 +01:00
Matt Pass
0296379cfa Fix to when we can show cursor & filesize shown
Now only changes cursor if both iframes are loaded
unitSize is shown in 2 decimal places now if unit type is megabytes
2012-07-13 18:10:01 +01:00
Matt Pass
e4e9217d84 Putting server vars into $ICEcoder array
All server variables such as codeMirrorDir, visibleTabs etc now in
$ICEcoder array
This is so we have a single object to contain all settings, just like
the JS equivalent
2012-07-13 18:05:28 +01:00
Matt Pass
bf06a64734 Version no update to v0.7.8 only 2012-07-11 13:40:24 +01:00
Matt Pass
7429ec9576 New var to determin if ICEcoder is ready
False to start, true on init
Only consider resizing file manager width if it's true
2012-07-11 13:34:06 +01:00
Matt Pass
176c8fc557 Only get mouseXY & test FM resizeon ICEcoder obj 2012-07-11 13:33:08 +01:00
Matt Pass
d2e5476432 Tweaks to getMouseXY & dragCursorTest
Now passing through the area the function was triggered from
If it's not the top strip, add on 40+50 px
If it's the editor, add on the filesW value
This gives us an XY position across the whole of ICEcoder
Icon applied to top, content & filesFrame now
2012-07-11 13:20:10 +01:00
Matt Pass
c53b0ba3ad Detect mouse down, up & move plus test FM resize
Setting up mouseDown value as bool on down & up events
Mouse move now gets X & Y pos along with determining area event
triggered in
Also then determins if we can resize file manager width & show w-resize
icon
All of this applied to HTML tag so at hightest DOM level
2012-07-11 13:16:54 +01:00
Matt Pass
e2137b3503 GIF icon changed
Given it's own icon, previously looked too much like JPEG icon
2012-07-10 17:53:58 +01:00
Matt Pass
dc051e993b closeTab CM 2.3 fix & new params
Fix to closing tabs as now using CodeMirror 2.3
oldName & newName params passed to renameFile
This is used by the replace in filenames function, but can also be API
updateFileManagerList now has new param
This again is so it can be used by find/replace, passed from
file-control.php
2012-07-10 07:17:37 +01:00
Matt Pass
a0dbbbe397 Multiple results working with find in filenames
Title outside of results DIV, which is now the scrollable container
Rename all/replace all button wording
Handling both cases now, find & documents and filenames
The latter works by scanning IDs and building up array
Find in filenames also handles selected filenames as well as all
filenames
Can rename singularly, rename all or click link to open file
2012-07-10 07:08:25 +01:00
Matt Pass
a5d473c546 h1 now outside of resultsPane, resultsPane scolls 2012-07-09 07:43:13 +01:00
Matt Pass
2204a15350 Focus on password box on load, style BG change 2012-07-09 07:36:25 +01:00
Matt Pass
971cd573fc Now passing back oldFileName to updateFileManager
Allows for API calls now not using rightClickedFile
2012-07-09 07:35:45 +01:00
Matt Pass
d3ba467e6a Style improvements & removing plural
Darker password box plus no border now
Darker login button
No longer want plurals DIV, class not needed
Minor changes to find box height & adding margin-right
Similar changes made to settings screen
2012-07-09 07:34:09 +01:00
Matt Pass
eb68960dca No longer using plurals 2012-07-09 07:13:50 +01:00
Matt Pass
1297705b53 Version no now 0.7.7 and using CodeMirror 2.3 2012-07-07 14:37:19 +01:00
Matt Pass
1a81c0b918 Focus on password field and CSS DOM changes
Now focuses on the password field if you're not logged in
Width now set on the .CodeMirror class and not .CodeMirror-scroll
Removed visible & hidden classes so no need to update this
Hiding & showing instances happens in better way now with CodeMirror 2.3
(So no longer applying theme + hidden/visible to theme)
(Instead changing display none/block on wrapper and applying theme with
setOption only)
2012-07-07 14:36:48 +01:00
Matt Pass
dd351eeaa5 CSS changes to work with new DOM
CodeMirror 2.3 has new DOM, so now setting width on .CodeMirror class
No longer need visible and hidden classes
2012-07-07 14:32:25 +01:00
Matt Pass
c505f4249d Title tooltip to show path
Hover mouse over files & folders to see path from root
2012-07-07 14:21:43 +01:00
Matt Pass
26340a0d54 Width now set on .CodeMirror class & new theme
New CodeMirror 2.3 structure means you have to set width on .CodeMirror
class
.CodeMirror-scroll is for height now only, this is because it's a fake
scroller
New theme added - Vibrant Ink
2012-07-07 14:20:59 +01:00
Matt Pass
6779ec9ab8 Upgrade to CodeMirror 2.3
Has reworked DOM for better scrolling of big docs
However, this includes changes to how scrolling is handled
(So need to work with new DOM instead)
2012-07-07 14:17:31 +01:00
Matt Pass
9a4944f91d Removed CodeMirror 2.25, using 2.3 now
Upgrade to CodeMirror 2.3
2012-07-07 14:15:12 +01:00
Matt Pass
5a2f004c20 CSS structure display changes & find in files QS
No longer using open & closed classes (italic text on open dirs)
This is because we have new icon to show open dirs
Reworked code to handle new UL & LI structure
Target querystring passed through if we're finding in files or filenames
2012-07-05 23:06:26 +01:00
Matt Pass
939eed7b3e open & closed classes now removed
No longer want italic on open dirs, we have icon to indicate this
2012-07-05 22:58:45 +01:00
Matt Pass
e7515b0fdb 2nd dir icon, refresh icon fixed position, UL fix
PNG image now has 2nd state for open dirs
.refresh class is now fixed position to always be visible
UL has margin-left set also to resolve CSS issues
New dirOpen:before pseudo class to show open dir icon
All other icon X position refs moved along 16px
2012-07-05 22:39:29 +01:00
Matt Pass
3eb97098bb Completely rewritten dir tree generator
Previous dir tree was working via the usual recursive method of scandir
The code was problematic as it was creating 3 dir trees and had an
incorrect UL structure
This now works in a completely different way, using PHPs inbuilt
iterators
Performance results are visibly noticable as file manager loads much
quicker
Tests show around a 100% increase in efficiency on servers with 1000's
of files & folders
There is also much less code, less repitition and it's much cleaner to
work with
The incorrect UL & LI structure has now been fixed and is valid
Loads of junk and redundant code removed also
2012-07-05 22:33:13 +01:00
Matt Pass
e4fd3927fa Version number update to v0.7.6 2012-07-01 14:01:31 +01:00
Matt Pass
a5e7452673 Fix to saving previousFiles & last10Files
Only saves files now if there are some (ie !="CLEAR")
2012-07-01 14:01:04 +01:00
Matt Pass
6a1796a284 Fixed previousFiles, settingsScreen & visibleTabs
Comma added before next file ref in previousFiles array string
settingsScreen now determins if it's being hidden or not
(used by update button)
Showing & hiding tabs now works again in useNewSettings function
2012-07-01 13:54:27 +01:00
Matt Pass
aaac445d84 CSS comment & simpler DOM targeting
Added comment on moving 3rd CSS class
showHideTabs now working again and simpler too
2012-07-01 13:49:32 +01:00
Matt Pass
fd9021190a Wrong comment syntax & new file undefined issue
Used // instead of /* */ in CSS, caused .cm-tab:after to be a missing
class
Simplified conditional inserting of tab arrow in PHP
Only checking indexOf .js, .css and .less if there is a fileName
2012-07-01 13:46:43 +01:00
Matt Pass
5c35c18e49 Commit again, no changes 2012-07-01 13:43:13 +01:00
Matt Pass
89777eebcf message, ask & getInput functions
alert calls now routed to message function
confirm calls now routed to ask function
prompt calls now routed to getInput function
This is so you can replace how these are handled if you wish
(Useful if you want to get away from browser chrome & UA dialogs)
2012-06-27 21:23:54 +01:00
Matt Pass
18b2a1a65f New perms param & chmod function
updateFileManagerList now takes a perms param
This is used when action=="chmod"
The target element is established and the new perm set in the span
New chmod function to receive file & new permission
This then adds to the server queue and server message
2012-06-27 20:56:51 +01:00
Matt Pass
edc5a9ea0a Perms value format change & perms span has ID
3 chars for perm now, ie 705, rather than 0705
Spans to contain the perm value now have an ID
This is so they can be updated after we chmod
2012-06-27 20:54:39 +01:00
Matt Pass
72edcc692b Dir size, chmod, perms update, hiding info
Return false on context menu
Show dir size if it's a dir
Hiding read/write info and absolute path if not logged in
Clarified by renaming relative path & absolute path
Permisions table to show checkboxes according to value
Input field & checkboxes linked, perm value established on changing
value
Simple validation carried out before you can submit
Submit calls the chmod function which starts the process of change
2012-06-27 20:53:10 +01:00
Matt Pass
6e6a0dae96 Permissions function added
New function to change permissions on request
Takes permission & applies top file/folder
Then updates file manager tree and server message
If it can't be changed, provide alert message
2012-06-27 20:47:00 +01:00
Matt Pass
c6224c4a4a User select, table style, altered cols & button
Allow users to select elements in this window (needed to copy text)
Styles added for new chmod table
Slightly narrower columns
Update button styling
2012-06-27 20:44:29 +01:00
Matt Pass
76f9c9dd7c Omitting parens on functions caused issue
Put parens back in, thought it worked without them
(if you're not passing a var through?). Oh well.
2012-06-27 20:41:11 +01:00
Matt Pass
d75c7f9f50 Properties screen
Shows basic info for files, accessed from file manager menu
2012-06-25 07:17:39 +01:00
Matt Pass
cc7887d452 $docRoot now defined here 2012-06-25 07:14:52 +01:00
Matt Pass
29f431cd78 Simplified screen showing & properties screen
Removed vis argument from function, hardcoded 'show'
New propertiesScreen function
2012-06-25 07:14:27 +01:00
Matt Pass
1a97623dee $docRoot moved, file menu hiding & Properties
$docRoot now established in settings.php
File manager menu now hides onmouseout
Properties added as an option to the file manager menu
Don't need to pass 'show' to screen showing functions
As we don't need parens with no params, () also removed
2012-06-25 07:12:57 +01:00
Matt Pass
79bd665b92 Removed document.all to check for .rules instead
Used more appropriate feature detection
2012-06-24 13:44:08 +01:00
Matt Pass
0de026fc2b No longer passing through old password
This is now picked up from config.php prior to any changes
No need to pass through at all and removed as its a security risk
2012-06-24 12:59:28 +01:00
Matt Pass
cb3f87d4d9 Version no update to v0.7.5 2012-06-24 12:50:01 +01:00
Matt Pass
f9ec7b7138 Only 1 hardcoded array position now & adding LESS
Stopped identifying CSS classes by number and now finding by
selectorText
A bit more code, but a bit more reliable & flexible (as you can shift
order now)
Added LESS support in all areas needed
Visible tabs has a bug and doesn't work now, to fix
2012-06-24 12:48:52 +01:00
Matt Pass
77e0e1d51f Added LESS & CoffeeScript support 2012-06-24 12:45:27 +01:00
Matt Pass
c28cd3506e No longer cleaning plugins array
This is because it replaces with HTML equivalents and causes problems
Variable is only updateable if you're logged in, so has reasonable
security
Will create a better solution in the future
2012-06-24 12:44:55 +01:00
Matt Pass
7dd3c36867 Removed CSS classes & altered people array
5 x CSS classes removed as not being used in theme example
People array altered to represent a few people who have given more
feedback & code
JS mode added because it's now compiled and needs to know which mode is
needed
Found the visible tabs has problem working, needs fixing
2012-06-24 12:43:05 +01:00
Matt Pass
4dd36c5130 LESS added, subsequent icons Y pos shifted 2012-06-24 12:39:16 +01:00
Matt Pass
f00628539a LESS icon added to spritesheet 2012-06-24 12:38:48 +01:00
Matt Pass
fcc5896926 LESS condition added 2012-06-24 12:38:34 +01:00
Matt Pass
75881d1c9f LESS mode included
Compiled into uglified JS file
2012-06-24 12:38:07 +01:00
Matt Pass
9597b057a6 strClean and numClean functions & usage
New functions to return a santisied string or number
Usage on quite a few variables
2012-06-23 17:33:48 +01:00
Matt Pass
7d209a1c58 Sanitising vars and working with new exclude var
Cleaning vars with strClean function now
Made a slight change to zipTgt to handle root with empty var
Checks and only adds file to zip if it's not excluded
2012-06-23 17:31:04 +01:00
Matt Pass
490ca1c1c3 Using codemirror-compressed.js now
Using a single JS for main CodeMirror JS file and 7 x mode JS files
This is from their compression page where all files are stored in 1 file
and also uglify compressed
Result is around 105k less bytes and will load quicker too as just 1
file
2012-06-23 17:24:59 +01:00
Matt Pass
95c0aa1812 No longer testing on document.all
Not testing for document.all to determin browser type & version anymore
Now actually testing for rules & pageX instead
2012-06-23 17:22:48 +01:00
Matt Pass
9cbb9f7529 Zip It! new URL format
Don't need index.php, so removed that
Added extra query string param to list files that should be excluded
from zip
Value of this param is media files (as per list we want to exclude
searching on)
Means you don't end up with long processes and potentially big zips
2012-06-23 17:20:40 +01:00
Matt Pass
c8a73fa56e String & number sanitising
Now cleaning strings & numbers before use in a few places
2012-06-23 17:18:12 +01:00
Matt Pass
29dff39bf1 Cleaning strings
Getting GET vars cleaned before use
2012-06-23 17:17:09 +01:00
Matt Pass
ef8190612f Now using codemirror-compressed.js
No need for JS mode file either, included in codemirror-compressed.js
2012-06-23 17:16:13 +01:00
Matt Pass
55d547d947 CodeMirror JS & mode compressed to 1 file
Now using the compression option on the CodeMirror site to get a single
JS file
This includes codemirror.js file & the 7 mode JS files in 1 file, also
uglify compressed
Result is a saving of around 105k!
2012-06-23 17:15:11 +01:00
Matt Pass
e80825ac3a Code reduction and clarification
this.innerHTML now using it's own innerHTML. Does work using dragSrcEl,
but is tricky to figure out
Condensed the 4 x array switches to a single for loop
2012-06-21 14:18:59 +01:00
Matt Pass
8d8edc171c Version v 0.7.4 number change only 2012-06-21 07:56:51 +01:00
Matt Pass
c1f4740b68 Vars & functions to control tab dragging
New dragSrcEl variable and 4 x functions to hand start, over, drop and
end
Means tabs can now be dragged & all references appropriately swapped
2012-06-21 07:56:10 +01:00
Matt Pass
d6a5f486d7 Draggable attribute added
To allow tabs to be dragged (using HTML5)
2012-06-21 07:54:39 +01:00
Matt Pass
807cc53fa8 Target references now hardcoded on init
Previously identified objects by selectTab, but this doesn't work with
dragged tabs
Now identifying using init 'num' value, which is much better & also
means less code
2012-06-21 07:53:55 +01:00
Matt Pass
2237c91067 Version number, Zip It! plugin & tabWidth
Version number now v 0.7.3
Zip It! is new plugin instead of backupOpenFiles
tabWidth now set to 4 chars by default
2012-06-17 16:34:37 +01:00
Matt Pass
98a08fddf8 tabWidth option and plugins tooltip
tabWidth option now saved as a setting
Plugins show tooltip now on hover via title attribute
2012-06-17 16:33:14 +01:00
Matt Pass
21cdcb20b4 New tabWidth option
tabWidth option now shown in 'style' section
On change, this affects editor demo instance
2012-06-17 16:27:59 +01:00
Matt Pass
47547b2ae8 Dark active line & dynamic tab widths
Config file included so we can use vars
Active line is now black rather than dark blue
(This is a bit experimental and unusual, so we'll see how it works out)
indentUnit & tabSize params in CM now uses JS var, so updateable
2012-06-17 16:26:43 +01:00
Matt Pass
6e9af92471 tabWidth var & Zip It! file manager option
New tabWidth var available to use
New Zip It! option added to file manager menu
(allowing users to zip anything on demand)
2012-06-17 16:21:53 +01:00
Matt Pass
cc7df4222a Removed unneeded for loop
Completely unneeded for loop controlling tabWidth's removed
2012-06-17 16:20:35 +01:00
Matt Pass
25b5af50c2 tabWidth changable & Zip It! on Demand
useNewSettings now takes a tabWidth param
This changes the width of all open documents in CM instance
New function to call Zip It! plugin on demand with target
(This means you can zip anything up from the file manager menu)
2012-06-17 16:17:31 +01:00
Matt Pass
7c8c728ad4 Darker file manager menu
Was same colour as file manager and didn't stand out
Now slightly darker to help visual appearance
2012-06-17 16:15:02 +01:00
Matt Pass
655fef4baa Zip It! Plugin Added
This replaces backupOpenFiles
Now zips up whole website be default, but also can zip up targets
This plugin is also now available from the file manager menu
2012-06-17 16:13:22 +01:00
Matt Pass
a27db58031 Removed backupOpenFiles Plugin
Plugin which backs up open files now removed
This is because the rest of your site isn't being backed up, just open
files
Now the whole site being backed up instead
Devs are used to saving regularly and so this is a better setup
2012-06-17 16:12:08 +01:00
Matt Pass
7c0cb2d1c3 goToLine now takes number as a param
You can optionally pass through a param to goToLine
It will go to this given line instead of textfield value
This makes it more usable via API calls
2012-06-11 07:48:46 +01:00
Matt Pass
229a089d45 Now checks for updates of ICEcoder & CodeMirror
Extended this process to check for firstly ICEcoder updates and then
CodeMirror
Both working via their own remotely sourced latest-version.txt files
If ICEcoder is up to date, if performs a check on CodeMirrors version
no.
2012-06-11 07:46:43 +01:00
Matt Pass
49ca9d75f9 testcMVersion var now checkUpdates
Repurposed this var to both check for newer ICEcoder and CodeMirror
versions
Renamed to checkUpdates
2012-06-11 07:43:46 +01:00
Matt Pass
745903d133 Move file/folder count & last 10 files clickable
File & folder count moved into files section
Last 10 files is now clickable to open file
Also shows [none] if there aren't any files to display
Couple of bytes saved in server DT display process
Will also only update server DT if it's visible
2012-06-10 11:46:23 +01:00
Matt Pass
54bf805548 openFile function now takes a file as param
You can now pass through a file link to this function
If passed through, it'll be set as the file to open
2012-06-10 11:36:54 +01:00
186 changed files with 18270 additions and 9449 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

View File

@@ -1,23 +0,0 @@
Copyright (C) 2012 by Marijn Haverbeke <marijnh@gmail.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.
Please note that some subdirectories of the CodeMirror distribution
include their own LICENSE files, and are released under different
licences.

View File

@@ -1,6 +0,0 @@
# CodeMirror 2
CodeMirror 2 is a rewrite of [CodeMirror
1](http://github.com/marijnh/CodeMirror). The docs live
[here](http://codemirror.net/doc/manual.html), and the project page is
[http://codemirror.net/](http://codemirror.net/).

View File

@@ -1,126 +0,0 @@
.CodeMirror {
line-height: 1em;
font-family: monospace;
}
.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;
}
.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;
}
.CodeMirror-lines {
padding: .4em;
white-space: pre;
}
.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;
}
.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: #cc7;}
.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;}
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}

File diff suppressed because it is too large Load Diff

View File

@@ -1,191 +0,0 @@
// the tagRangeFinder function is
// Copyright (C) 2011 by Daniel Glazman <daniel@glazman.org>
// released under the MIT license (../../LICENSE) like the rest of CodeMirror
CodeMirror.tagRangeFinder = function(cm, line, hideEnd) {
var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
var nameChar = nameStartChar + "\-\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
var xmlNAMERegExp = new RegExp("^[" + nameStartChar + "][" + nameChar + "]*");
var lineText = cm.getLine(line);
var found = false;
var tag = null;
var pos = 0;
while (!found) {
pos = lineText.indexOf("<", pos);
if (-1 == pos) // no tag on line
return;
if (pos + 1 < lineText.length && lineText[pos + 1] == "/") { // closing tag
pos++;
continue;
}
// ok we weem to have a start tag
if (!lineText.substr(pos + 1).match(xmlNAMERegExp)) { // not a tag name...
pos++;
continue;
}
var gtPos = lineText.indexOf(">", pos + 1);
if (-1 == gtPos) { // end of start tag not in line
var l = line + 1;
var foundGt = false;
var lastLine = cm.lineCount();
while (l < lastLine && !foundGt) {
var lt = cm.getLine(l);
var gt = lt.indexOf(">");
if (-1 != gt) { // found a >
foundGt = true;
var slash = lt.lastIndexOf("/", gt);
if (-1 != slash && slash < gt) {
var str = lineText.substr(slash, gt - slash + 1);
if (!str.match( /\/\s*\>/ )) { // yep, that's the end of empty tag
if (hideEnd === true) l++;
return l;
}
}
}
l++;
}
found = true;
}
else {
var slashPos = lineText.lastIndexOf("/", gtPos);
if (-1 == slashPos) { // cannot be empty tag
found = true;
// don't continue
}
else { // empty tag?
// check if really empty tag
var str = lineText.substr(slashPos, gtPos - slashPos + 1);
if (!str.match( /\/\s*\>/ )) { // finally not empty
found = true;
// don't continue
}
}
}
if (found) {
var subLine = lineText.substr(pos + 1);
tag = subLine.match(xmlNAMERegExp);
if (tag) {
// we have an element name, wooohooo !
tag = tag[0];
// do we have the close tag on same line ???
if (-1 != lineText.indexOf("</" + tag + ">", pos)) // yep
{
found = false;
}
// we don't, so we have a candidate...
}
else
found = false;
}
if (!found)
pos++;
}
if (found) {
var startTag = "(\\<\\/" + tag + "\\>)|(\\<" + tag + "\\>)|(\\<" + tag + "\\s)|(\\<" + tag + "$)";
var startTagRegExp = new RegExp(startTag, "g");
var endTag = "</" + tag + ">";
var depth = 1;
var l = line + 1;
var lastLine = cm.lineCount();
while (l < lastLine) {
lineText = cm.getLine(l);
var match = lineText.match(startTagRegExp);
if (match) {
for (var i = 0; i < match.length; i++) {
if (match[i] == endTag)
depth--;
else
depth++;
if (!depth) {
if (hideEnd === true) l++;
return l;
}
}
}
l++;
}
return;
}
};
CodeMirror.braceRangeFinder = function(cm, line, hideEnd) {
var lineText = cm.getLine(line);
var startChar = lineText.lastIndexOf("{");
if (startChar < 0 || lineText.lastIndexOf("}") > startChar) return;
var tokenType = cm.getTokenAt({line: line, ch: startChar}).className;
var count = 1, lastLine = cm.lineCount(), end;
outer: for (var i = line + 1; i < lastLine; ++i) {
var text = cm.getLine(i), pos = 0;
for (;;) {
var nextOpen = text.indexOf("{", pos), nextClose = text.indexOf("}", pos);
if (nextOpen < 0) nextOpen = text.length;
if (nextClose < 0) nextClose = text.length;
pos = Math.min(nextOpen, nextClose);
if (pos == text.length) break;
if (cm.getTokenAt({line: i, ch: pos + 1}).className == tokenType) {
if (pos == nextOpen) ++count;
else if (!--count) { end = i; break outer; }
}
++pos;
}
}
if (end == null || end == line + 1) return;
if (hideEnd === true) end++;
return end;
};
CodeMirror.indentRangeFinder = function(cm, line) {
var tabSize = cm.getOption("tabSize");
var myIndent = cm.getLineHandle(line).indentation(tabSize), last;
for (var i = line + 1, end = cm.lineCount(); i < end; ++i) {
var handle = cm.getLineHandle(i);
if (!/^\s*$/.test(handle.text)) {
if (handle.indentation(tabSize) <= myIndent) break;
last = i;
}
}
if (!last) return null;
return last + 1;
};
CodeMirror.newFoldFunction = function(rangeFinder, markText, hideEnd) {
var folded = [];
if (markText == null) markText = '<div style="position: absolute; left: 2px; color:#600">&#x25bc;</div>%N%';
function isFolded(cm, n) {
for (var i = 0; i < folded.length; ++i) {
var start = cm.lineInfo(folded[i].start);
if (!start) folded.splice(i--, 1);
else if (start.line == n) return {pos: i, region: folded[i]};
}
}
function expand(cm, region) {
cm.clearMarker(region.start);
for (var i = 0; i < region.hidden.length; ++i)
cm.showLine(region.hidden[i]);
}
return function(cm, line) {
cm.operation(function() {
var known = isFolded(cm, line);
if (known) {
folded.splice(known.pos, 1);
expand(cm, known.region);
} else {
var end = rangeFinder(cm, line, hideEnd);
if (end == null) return;
var hidden = [];
for (var i = line + 1; i < end; ++i) {
var handle = cm.hideLine(i);
if (handle) hidden.push(handle);
}
var first = cm.setMarker(line, markText);
var region = {start: first, hidden: hidden};
cm.onDeleteLine(first, function() { expand(cm, region); });
folded.push(region);
}
});
};
};

View File

@@ -1,44 +0,0 @@
// Define match-highlighter commands. Depends on searchcursor.js
// Use by attaching the following function call to the onCursorActivity event:
//myCodeMirror.matchHighlight(minChars);
// And including a special span.CodeMirror-matchhighlight css class (also optionally a separate one for .CodeMirror-focused -- see demo matchhighlighter.html)
(function() {
var DEFAULT_MIN_CHARS = 2;
function MatchHighlightState() {
this.marked = [];
}
function getMatchHighlightState(cm) {
return cm._matchHighlightState || (cm._matchHighlightState = new MatchHighlightState());
}
function clearMarks(cm) {
var state = getMatchHighlightState(cm);
for (var i = 0; i < state.marked.length; ++i)
state.marked[i].clear();
state.marked = [];
}
function markDocument(cm, className, minChars) {
clearMarks(cm);
minChars = (typeof minChars !== 'undefined' ? minChars : DEFAULT_MIN_CHARS);
if (cm.somethingSelected() && cm.getSelection().replace(/^\s+|\s+$/g, "").length >= minChars) {
var state = getMatchHighlightState(cm);
var query = cm.getSelection();
cm.operation(function() {
if (cm.lineCount() < 2000) { // This is too expensive on big documents.
for (var cursor = cm.getSearchCursor(query); cursor.findNext();) {
//Only apply matchhighlight to the matches other than the one actually selected
if (!(cursor.from().line === cm.getCursor(true).line && cursor.from().ch === cm.getCursor(true).ch))
state.marked.push(cm.markText(cursor.from(), cursor.to(), className));
}
}
});
}
}
CodeMirror.defineExtension("matchHighlight", function(className, minChars) {
markDocument(this, className, minChars);
});
})();

View File

@@ -1,117 +0,0 @@
(function(){
function SearchCursor(cm, query, pos, caseFold) {
this.atOccurrence = false; this.cm = cm;
if (caseFold == null && typeof query == "string") caseFold = false;
pos = pos ? cm.clipPos(pos) : {line: 0, ch: 0};
this.pos = {from: pos, to: pos};
// The matches method is filled in based on the type of query.
// It takes a position and a direction, and returns an object
// describing the next occurrence of the query, or null if no
// more matches were found.
if (typeof query != "string") // Regexp match
this.matches = function(reverse, pos) {
if (reverse) {
var line = cm.getLine(pos.line).slice(0, pos.ch), match = line.match(query), start = 0;
while (match) {
var ind = line.indexOf(match[0]);
start += ind;
line = line.slice(ind + 1);
var newmatch = line.match(query);
if (newmatch) match = newmatch;
else break;
start++;
}
}
else {
var line = cm.getLine(pos.line).slice(pos.ch), match = line.match(query),
start = match && pos.ch + line.indexOf(match[0]);
}
if (match)
return {from: {line: pos.line, ch: start},
to: {line: pos.line, ch: start + match[0].length},
match: match};
};
else { // String query
if (caseFold) query = query.toLowerCase();
var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;};
var target = query.split("\n");
// Different methods for single-line and multi-line queries
if (target.length == 1)
this.matches = function(reverse, pos) {
var line = fold(cm.getLine(pos.line)), len = query.length, match;
if (reverse ? (pos.ch >= len && (match = line.lastIndexOf(query, pos.ch - len)) != -1)
: (match = line.indexOf(query, pos.ch)) != -1)
return {from: {line: pos.line, ch: match},
to: {line: pos.line, ch: match + len}};
};
else
this.matches = function(reverse, pos) {
var ln = pos.line, idx = (reverse ? target.length - 1 : 0), match = target[idx], line = fold(cm.getLine(ln));
var offsetA = (reverse ? line.indexOf(match) + match.length : line.lastIndexOf(match));
if (reverse ? offsetA >= pos.ch || offsetA != match.length
: offsetA <= pos.ch || offsetA != line.length - match.length)
return;
for (;;) {
if (reverse ? !ln : ln == cm.lineCount() - 1) return;
line = fold(cm.getLine(ln += reverse ? -1 : 1));
match = target[reverse ? --idx : ++idx];
if (idx > 0 && idx < target.length - 1) {
if (line != match) return;
else continue;
}
var offsetB = (reverse ? line.lastIndexOf(match) : line.indexOf(match) + match.length);
if (reverse ? offsetB != line.length - match.length : offsetB != match.length)
return;
var start = {line: pos.line, ch: offsetA}, end = {line: ln, ch: offsetB};
return {from: reverse ? end : start, to: reverse ? start : end};
}
};
}
}
SearchCursor.prototype = {
findNext: function() {return this.find(false);},
findPrevious: function() {return this.find(true);},
find: function(reverse) {
var self = this, pos = this.cm.clipPos(reverse ? this.pos.from : this.pos.to);
function savePosAndFail(line) {
var pos = {line: line, ch: 0};
self.pos = {from: pos, to: pos};
self.atOccurrence = false;
return false;
}
for (;;) {
if (this.pos = this.matches(reverse, pos)) {
this.atOccurrence = true;
return this.pos.match || true;
}
if (reverse) {
if (!pos.line) return savePosAndFail(0);
pos = {line: pos.line-1, ch: this.cm.getLine(pos.line-1).length};
}
else {
var maxLine = this.cm.lineCount();
if (pos.line == maxLine - 1) return savePosAndFail(maxLine);
pos = {line: pos.line+1, ch: 0};
}
}
},
from: function() {if (this.atOccurrence) return this.pos.from;},
to: function() {if (this.atOccurrence) return this.pos.to;},
replace: function(newText) {
var self = this;
if (this.atOccurrence)
self.pos.to = this.cm.replaceRange(newText, self.pos.from, self.pos.to);
}
};
CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) {
return new SearchCursor(this, query, pos, caseFold);
});
})();

View File

@@ -1,234 +0,0 @@
CodeMirror.defineMode("clike", function(config, parserConfig) {
var indentUnit = config.indentUnit,
keywords = parserConfig.keywords || {},
blockKeywords = parserConfig.blockKeywords || {},
atoms = parserConfig.atoms || {},
hooks = parserConfig.hooks || {},
multiLineStrings = parserConfig.multiLineStrings;
var isOperatorChar = /[+\-*&%=<>!?|\/]/;
var curPunc;
function tokenBase(stream, state) {
var ch = stream.next();
if (hooks[ch]) {
var result = hooks[ch](stream, state);
if (result !== false) return result;
}
if (ch == '"' || ch == "'") {
state.tokenize = tokenString(ch);
return state.tokenize(stream, state);
}
if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
curPunc = ch;
return null;
}
if (/\d/.test(ch)) {
stream.eatWhile(/[\w\.]/);
return "number";
}
if (ch == "/") {
if (stream.eat("*")) {
state.tokenize = tokenComment;
return tokenComment(stream, state);
}
if (stream.eat("/")) {
stream.skipToEnd();
return "comment";
}
}
if (isOperatorChar.test(ch)) {
stream.eatWhile(isOperatorChar);
return "operator";
}
stream.eatWhile(/[\w\$_]/);
var cur = stream.current();
if (keywords.propertyIsEnumerable(cur)) {
if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement";
return "keyword";
}
if (atoms.propertyIsEnumerable(cur)) return "atom";
return "word";
}
function tokenString(quote) {
return function(stream, state) {
var escaped = false, next, end = false;
while ((next = stream.next()) != null) {
if (next == quote && !escaped) {end = true; break;}
escaped = !escaped && next == "\\";
}
if (end || !(escaped || multiLineStrings))
state.tokenize = null;
return "string";
};
}
function tokenComment(stream, state) {
var maybeEnd = false, ch;
while (ch = stream.next()) {
if (ch == "/" && maybeEnd) {
state.tokenize = null;
break;
}
maybeEnd = (ch == "*");
}
return "comment";
}
function Context(indented, column, type, align, prev) {
this.indented = indented;
this.column = column;
this.type = type;
this.align = align;
this.prev = prev;
}
function pushContext(state, col, type) {
return state.context = new Context(state.indented, col, type, null, state.context);
}
function popContext(state) {
var t = state.context.type;
if (t == ")" || t == "]" || t == "}")
state.indented = state.context.indented;
return state.context = state.context.prev;
}
// Interface
return {
startState: function(basecolumn) {
return {
tokenize: null,
context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
indented: 0,
startOfLine: true
};
},
token: function(stream, state) {
var ctx = state.context;
if (stream.sol()) {
if (ctx.align == null) ctx.align = false;
state.indented = stream.indentation();
state.startOfLine = true;
}
if (stream.eatSpace()) return null;
curPunc = null;
var style = (state.tokenize || tokenBase)(stream, state);
if (style == "comment" || style == "meta") return style;
if (ctx.align == null) ctx.align = true;
if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state);
else if (curPunc == "{") pushContext(state, stream.column(), "}");
else if (curPunc == "[") pushContext(state, stream.column(), "]");
else if (curPunc == "(") pushContext(state, stream.column(), ")");
else if (curPunc == "}") {
while (ctx.type == "statement") ctx = popContext(state);
if (ctx.type == "}") ctx = popContext(state);
while (ctx.type == "statement") ctx = popContext(state);
}
else if (curPunc == ctx.type) popContext(state);
else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement"))
pushContext(state, stream.column(), "statement");
state.startOfLine = false;
return style;
},
indent: function(state, textAfter) {
if (state.tokenize != tokenBase && state.tokenize != null) return 0;
var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);
if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev;
var closing = firstChar == ctx.type;
if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit);
else if (ctx.align) return ctx.column + (closing ? 0 : 1);
else return ctx.indented + (closing ? 0 : indentUnit);
},
electricChars: "{}"
};
});
(function() {
function words(str) {
var obj = {}, words = str.split(" ");
for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
return obj;
}
var cKeywords = "auto if break int case long char register continue return default short do sizeof " +
"double static else struct entry switch extern typedef float union for unsigned " +
"goto while enum void const signed volatile";
function cppHook(stream, state) {
if (!state.startOfLine) return false;
stream.skipToEnd();
return "meta";
}
// C#-style strings where "" escapes a quote.
function tokenAtString(stream, state) {
var next;
while ((next = stream.next()) != null) {
if (next == '"' && !stream.eat('"')) {
state.tokenize = null;
break;
}
}
return "string";
}
CodeMirror.defineMIME("text/x-csrc", {
name: "clike",
keywords: words(cKeywords),
blockKeywords: words("case do else for if switch while struct"),
atoms: words("null"),
hooks: {"#": cppHook}
});
CodeMirror.defineMIME("text/x-c++src", {
name: "clike",
keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try bool explicit new " +
"static_cast typeid catch operator template typename class friend private " +
"this using const_cast inline public throw virtual delete mutable protected " +
"wchar_t"),
blockKeywords: words("catch class do else finally for if struct switch try while"),
atoms: words("true false null"),
hooks: {"#": cppHook}
});
CodeMirror.defineMIME("text/x-java", {
name: "clike",
keywords: words("abstract assert boolean break byte case catch char class const continue default " +
"do double else enum extends final finally float for goto if implements import " +
"instanceof int interface long native new package private protected public " +
"return short static strictfp super switch synchronized this throw throws transient " +
"try void volatile while"),
blockKeywords: words("catch class do else finally for if switch try while"),
atoms: words("true false null"),
hooks: {
"@": function(stream, state) {
stream.eatWhile(/[\w\$_]/);
return "meta";
}
}
});
CodeMirror.defineMIME("text/x-csharp", {
name: "clike",
keywords: words("abstract as base bool break byte case catch char checked class const continue decimal" +
" default delegate do double else enum event explicit extern finally fixed float for" +
" foreach goto if implicit in int interface internal is lock long namespace new object" +
" operator out override params private protected public readonly ref return sbyte sealed short" +
" sizeof stackalloc static string struct switch this throw try typeof uint ulong unchecked" +
" unsafe ushort using virtual void volatile while add alias ascending descending dynamic from get" +
" global group into join let orderby partial remove select set value var yield"),
blockKeywords: words("catch class do else finally for foreach if struct switch try while"),
atoms: words("true false null"),
hooks: {
"@": function(stream, state) {
if (stream.eat('"')) {
state.tokenize = tokenAtString;
return tokenAtString(stream, state);
}
stream.eatWhile(/[\w\$_]/);
return "meta";
}
}
});
}());

View File

@@ -1,347 +0,0 @@
/**
* Link to the project's GitHub page:
* https://github.com/pickhardt/coffeescript-codemirror-mode
*/
CodeMirror.defineMode('coffeescript', function(conf) {
var ERRORCLASS = 'error';
function wordRegexp(words) {
return new RegExp("^((" + words.join(")|(") + "))\\b");
}
var singleOperators = new RegExp("^[\\+\\-\\*/%&|\\^~<>!\?]");
var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]');
var doubleOperators = new RegExp("^((\->)|(\=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))");
var doubleDelimiters = new RegExp("^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))");
var tripleDelimiters = new RegExp("^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))");
var identifiers = new RegExp("^[_A-Za-z$][_A-Za-z$0-9]*");
var wordOperators = wordRegexp(['and', 'or', 'not',
'is', 'isnt', 'in',
'instanceof', 'typeof']);
var indentKeywords = ['for', 'while', 'loop', 'if', 'unless', 'else',
'switch', 'try', 'catch', 'finally', 'class'];
var commonKeywords = ['break', 'by', 'continue', 'debugger', 'delete',
'do', 'in', 'of', 'new', 'return', 'then',
'this', 'throw', 'when', 'until'];
var keywords = wordRegexp(indentKeywords.concat(commonKeywords));
indentKeywords = wordRegexp(indentKeywords);
var stringPrefixes = new RegExp("^('{3}|\"{3}|['\"])");
var regexPrefixes = new RegExp("^(/{3}|/)");
var commonConstants = ['Infinity', 'NaN', 'undefined', 'null', 'true', 'false', 'on', 'off', 'yes', 'no'];
var constants = wordRegexp(commonConstants);
// Tokenizers
function tokenBase(stream, state) {
// Handle scope changes
if (stream.sol()) {
var scopeOffset = state.scopes[0].offset;
if (stream.eatSpace()) {
var lineOffset = stream.indentation();
if (lineOffset > scopeOffset) {
return 'indent';
} else if (lineOffset < scopeOffset) {
return 'dedent';
}
return null;
} else {
if (scopeOffset > 0) {
dedent(stream, state);
}
}
}
if (stream.eatSpace()) {
return null;
}
var ch = stream.peek();
// Handle docco title comment (single line)
if (stream.match("####")) {
stream.skipToEnd();
return 'comment';
}
// Handle multi line comments
if (stream.match("###")) {
state.tokenize = longComment;
return state.tokenize(stream, state);
}
// Single line comment
if (ch === '#') {
stream.skipToEnd();
return 'comment';
}
// Handle number literals
if (stream.match(/^-?[0-9\.]/, false)) {
var floatLiteral = false;
// Floats
if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) {
floatLiteral = true;
}
if (stream.match(/^-?\d+\.\d*/)) {
floatLiteral = true;
}
if (stream.match(/^-?\.\d+/)) {
floatLiteral = true;
}
if (floatLiteral) {
// prevent from getting extra . on 1..
if (stream.peek() == "."){
stream.backUp(1);
}
return 'number';
}
// Integers
var intLiteral = false;
// Hex
if (stream.match(/^-?0x[0-9a-f]+/i)) {
intLiteral = true;
}
// Decimal
if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) {
intLiteral = true;
}
// Zero by itself with no other piece of number.
if (stream.match(/^-?0(?![\dx])/i)) {
intLiteral = true;
}
if (intLiteral) {
return 'number';
}
}
// Handle strings
if (stream.match(stringPrefixes)) {
state.tokenize = tokenFactory(stream.current(), 'string');
return state.tokenize(stream, state);
}
// Handle regex literals
if (stream.match(regexPrefixes)) {
if (stream.current() != '/' || stream.match(/^.*\//, false)) { // prevent highlight of division
state.tokenize = tokenFactory(stream.current(), 'string-2');
return state.tokenize(stream, state);
} else {
stream.backUp(1);
}
}
// Handle operators and delimiters
if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) {
return 'punctuation';
}
if (stream.match(doubleOperators)
|| stream.match(singleOperators)
|| stream.match(wordOperators)) {
return 'operator';
}
if (stream.match(singleDelimiters)) {
return 'punctuation';
}
if (stream.match(constants)) {
return 'atom';
}
if (stream.match(keywords)) {
return 'keyword';
}
if (stream.match(identifiers)) {
return 'variable';
}
// Handle non-detected items
stream.next();
return ERRORCLASS;
}
function tokenFactory(delimiter, outclass) {
var singleline = delimiter.length == 1;
return function tokenString(stream, state) {
while (!stream.eol()) {
stream.eatWhile(/[^'"\/\\]/);
if (stream.eat('\\')) {
stream.next();
if (singleline && stream.eol()) {
return outclass;
}
} else if (stream.match(delimiter)) {
state.tokenize = tokenBase;
return outclass;
} else {
stream.eat(/['"\/]/);
}
}
if (singleline) {
if (conf.mode.singleLineStringErrors) {
outclass = ERRORCLASS
} else {
state.tokenize = tokenBase;
}
}
return outclass;
};
}
function longComment(stream, state) {
while (!stream.eol()) {
stream.eatWhile(/[^#]/);
if (stream.match("###")) {
state.tokenize = tokenBase;
break;
}
stream.eatWhile("#");
}
return "comment"
}
function indent(stream, state, type) {
type = type || 'coffee';
var indentUnit = 0;
if (type === 'coffee') {
for (var i = 0; i < state.scopes.length; i++) {
if (state.scopes[i].type === 'coffee') {
indentUnit = state.scopes[i].offset + conf.indentUnit;
break;
}
}
} else {
indentUnit = stream.column() + stream.current().length;
}
state.scopes.unshift({
offset: indentUnit,
type: type
});
}
function dedent(stream, state) {
if (state.scopes.length == 1) return;
if (state.scopes[0].type === 'coffee') {
var _indent = stream.indentation();
var _indent_index = -1;
for (var i = 0; i < state.scopes.length; ++i) {
if (_indent === state.scopes[i].offset) {
_indent_index = i;
break;
}
}
if (_indent_index === -1) {
return true;
}
while (state.scopes[0].offset !== _indent) {
state.scopes.shift();
}
return false
} else {
state.scopes.shift();
return false;
}
}
function tokenLexer(stream, state) {
var style = state.tokenize(stream, state);
var current = stream.current();
// Handle '.' connected identifiers
if (current === '.') {
style = state.tokenize(stream, state);
current = stream.current();
if (style === 'variable') {
return 'variable';
} else {
return ERRORCLASS;
}
}
// Handle properties
if (current === '@') {
stream.eat('@');
return 'keyword';
}
// Handle scope changes.
if (current === 'return') {
state.dedent += 1;
}
if (((current === '->' || current === '=>') &&
!state.lambda &&
state.scopes[0].type == 'coffee' &&
stream.peek() === '')
|| style === 'indent') {
indent(stream, state);
}
var delimiter_index = '[({'.indexOf(current);
if (delimiter_index !== -1) {
indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1));
}
if (indentKeywords.exec(current)){
indent(stream, state);
}
if (current == 'then'){
dedent(stream, state);
}
if (style === 'dedent') {
if (dedent(stream, state)) {
return ERRORCLASS;
}
}
delimiter_index = '])}'.indexOf(current);
if (delimiter_index !== -1) {
if (dedent(stream, state)) {
return ERRORCLASS;
}
}
if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'coffee') {
if (state.scopes.length > 1) state.scopes.shift();
state.dedent -= 1;
}
return style;
}
var external = {
startState: function(basecolumn) {
return {
tokenize: tokenBase,
scopes: [{offset:basecolumn || 0, type:'coffee'}],
lastToken: null,
lambda: false,
dedent: 0
};
},
token: function(stream, state) {
var style = tokenLexer(stream, state);
state.lastToken = {style:style, content: stream.current()};
if (stream.eol() && stream.lambda) {
state.lambda = false;
}
return style;
},
indent: function(state, textAfter) {
if (state.tokenize != tokenBase) {
return 0;
}
return state.scopes[0].offset;
}
};
return external;
});
CodeMirror.defineMIME('text/x-coffeescript', 'coffeescript');

View File

@@ -1,124 +0,0 @@
CodeMirror.defineMode("css", function(config) {
var indentUnit = config.indentUnit, type;
function ret(style, tp) {type = tp; return style;}
function tokenBase(stream, state) {
var ch = stream.next();
if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());}
else if (ch == "/" && stream.eat("*")) {
state.tokenize = tokenCComment;
return tokenCComment(stream, state);
}
else if (ch == "<" && stream.eat("!")) {
state.tokenize = tokenSGMLComment;
return tokenSGMLComment(stream, state);
}
else if (ch == "=") ret(null, "compare");
else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare");
else if (ch == "\"" || ch == "'") {
state.tokenize = tokenString(ch);
return state.tokenize(stream, state);
}
else if (ch == "#") {
stream.eatWhile(/[\w\\\-]/);
return ret("atom", "hash");
}
else if (ch == "!") {
stream.match(/^\s*\w*/);
return ret("keyword", "important");
}
else if (/\d/.test(ch)) {
stream.eatWhile(/[\w.%]/);
return ret("number", "unit");
}
else if (/[,.+>*\/]/.test(ch)) {
return ret(null, "select-op");
}
else if (/[;{}:\[\]]/.test(ch)) {
return ret(null, ch);
}
else {
stream.eatWhile(/[\w\\\-]/);
return ret("variable", "variable");
}
}
function tokenCComment(stream, state) {
var maybeEnd = false, ch;
while ((ch = stream.next()) != null) {
if (maybeEnd && ch == "/") {
state.tokenize = tokenBase;
break;
}
maybeEnd = (ch == "*");
}
return ret("comment", "comment");
}
function tokenSGMLComment(stream, state) {
var dashes = 0, ch;
while ((ch = stream.next()) != null) {
if (dashes >= 2 && ch == ">") {
state.tokenize = tokenBase;
break;
}
dashes = (ch == "-") ? dashes + 1 : 0;
}
return ret("comment", "comment");
}
function tokenString(quote) {
return function(stream, state) {
var escaped = false, ch;
while ((ch = stream.next()) != null) {
if (ch == quote && !escaped)
break;
escaped = !escaped && ch == "\\";
}
if (!escaped) state.tokenize = tokenBase;
return ret("string", "string");
};
}
return {
startState: function(base) {
return {tokenize: tokenBase,
baseIndent: base || 0,
stack: []};
},
token: function(stream, state) {
if (stream.eatSpace()) return null;
var style = state.tokenize(stream, state);
var context = state.stack[state.stack.length-1];
if (type == "hash" && context != "rule") style = "string-2";
else if (style == "variable") {
if (context == "rule") style = "number";
else if (!context || context == "@media{") style = "tag";
}
if (context == "rule" && /^[\{\};]$/.test(type))
state.stack.pop();
if (type == "{") {
if (context == "@media") state.stack[state.stack.length-1] = "@media{";
else state.stack.push("{");
}
else if (type == "}") state.stack.pop();
else if (type == "@media") state.stack.push("@media");
else if (context == "{" && type != "comment") state.stack.push("rule");
return style;
},
indent: function(state, textAfter) {
var n = state.stack.length;
if (/^\}/.test(textAfter))
n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1;
return state.baseIndent + n * indentUnit;
},
electricChars: "}"
};
});
CodeMirror.defineMIME("text/css", "css");

View File

@@ -1,361 +0,0 @@
CodeMirror.defineMode("javascript", function(config, parserConfig) {
var indentUnit = config.indentUnit;
var jsonMode = parserConfig.json;
// Tokenizer
var keywords = function(){
function kw(type) {return {type: type, style: "keyword"};}
var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c");
var operator = kw("operator"), atom = {type: "atom", style: "atom"};
return {
"if": A, "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
"return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C,
"var": kw("var"), "const": kw("var"), "let": kw("var"),
"function": kw("function"), "catch": kw("catch"),
"for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
"in": operator, "typeof": operator, "instanceof": operator,
"true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom
};
}();
var isOperatorChar = /[+\-*&%=<>!?|]/;
function chain(stream, state, f) {
state.tokenize = f;
return f(stream, state);
}
function nextUntilUnescaped(stream, end) {
var escaped = false, next;
while ((next = stream.next()) != null) {
if (next == end && !escaped)
return false;
escaped = !escaped && next == "\\";
}
return escaped;
}
// Used as scratch variables to communicate multiple values without
// consing up tons of objects.
var type, content;
function ret(tp, style, cont) {
type = tp; content = cont;
return style;
}
function jsTokenBase(stream, state) {
var ch = stream.next();
if (ch == '"' || ch == "'")
return chain(stream, state, jsTokenString(ch));
else if (/[\[\]{}\(\),;\:\.]/.test(ch))
return ret(ch);
else if (ch == "0" && stream.eat(/x/i)) {
stream.eatWhile(/[\da-f]/i);
return ret("number", "number");
}
else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) {
stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
return ret("number", "number");
}
else if (ch == "/") {
if (stream.eat("*")) {
return chain(stream, state, jsTokenComment);
}
else if (stream.eat("/")) {
stream.skipToEnd();
return ret("comment", "comment");
}
else if (state.reAllowed) {
nextUntilUnescaped(stream, "/");
stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla
return ret("regexp", "string-2");
}
else {
stream.eatWhile(isOperatorChar);
return ret("operator", null, stream.current());
}
}
else if (ch == "#") {
stream.skipToEnd();
return ret("error", "error");
}
else if (isOperatorChar.test(ch)) {
stream.eatWhile(isOperatorChar);
return ret("operator", null, stream.current());
}
else {
stream.eatWhile(/[\w\$_]/);
var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];
return (known && state.kwAllowed) ? ret(known.type, known.style, word) :
ret("variable", "variable", word);
}
}
function jsTokenString(quote) {
return function(stream, state) {
if (!nextUntilUnescaped(stream, quote))
state.tokenize = jsTokenBase;
return ret("string", "string");
};
}
function jsTokenComment(stream, state) {
var maybeEnd = false, ch;
while (ch = stream.next()) {
if (ch == "/" && maybeEnd) {
state.tokenize = jsTokenBase;
break;
}
maybeEnd = (ch == "*");
}
return ret("comment", "comment");
}
// Parser
var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true};
function JSLexical(indented, column, type, align, prev, info) {
this.indented = indented;
this.column = column;
this.type = type;
this.prev = prev;
this.info = info;
if (align != null) this.align = align;
}
function inScope(state, varname) {
for (var v = state.localVars; v; v = v.next)
if (v.name == varname) return true;
}
function parseJS(state, style, type, content, stream) {
var cc = state.cc;
// Communicate our context to the combinators.
// (Less wasteful than consing up a hundred closures on every call.)
cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;
if (!state.lexical.hasOwnProperty("align"))
state.lexical.align = true;
while(true) {
var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
if (combinator(type, content)) {
while(cc.length && cc[cc.length - 1].lex)
cc.pop()();
if (cx.marked) return cx.marked;
if (type == "variable" && inScope(state, content)) return "variable-2";
return style;
}
}
}
// Combinator utils
var cx = {state: null, column: null, marked: null, cc: null};
function pass() {
for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
}
function cont() {
pass.apply(null, arguments);
return true;
}
function register(varname) {
var state = cx.state;
if (state.context) {
cx.marked = "def";
for (var v = state.localVars; v; v = v.next)
if (v.name == varname) return;
state.localVars = {name: varname, next: state.localVars};
}
}
// Combinators
var defaultVars = {name: "this", next: {name: "arguments"}};
function pushcontext() {
if (!cx.state.context) cx.state.localVars = defaultVars;
cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};
}
function popcontext() {
cx.state.localVars = cx.state.context.vars;
cx.state.context = cx.state.context.prev;
}
function pushlex(type, info) {
var result = function() {
var state = cx.state;
state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info)
};
result.lex = true;
return result;
}
function poplex() {
var state = cx.state;
if (state.lexical.prev) {
if (state.lexical.type == ")")
state.indented = state.lexical.indented;
state.lexical = state.lexical.prev;
}
}
poplex.lex = true;
function expect(wanted) {
return function expecting(type) {
if (type == wanted) return cont();
else if (wanted == ";") return pass();
else return cont(arguments.callee);
};
}
function statement(type) {
if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex);
if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex);
if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
if (type == "{") return cont(pushlex("}"), block, poplex);
if (type == ";") return cont();
if (type == "function") return cont(functiondef);
if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"),
poplex, statement, poplex);
if (type == "variable") return cont(pushlex("stat"), maybelabel);
if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"),
block, poplex, poplex);
if (type == "case") return cont(expression, expect(":"));
if (type == "default") return cont(expect(":"));
if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
statement, poplex, popcontext);
return pass(pushlex("stat"), expression, expect(";"), poplex);
}
function expression(type) {
if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);
if (type == "function") return cont(functiondef);
if (type == "keyword c") return cont(maybeexpression);
if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator);
if (type == "operator") return cont(expression);
if (type == "[") return cont(pushlex("]"), commasep(expression, "]"), poplex, maybeoperator);
if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator);
return cont();
}
function maybeexpression(type) {
if (type.match(/[;\}\)\],]/)) return pass();
return pass(expression);
}
function maybeoperator(type, value) {
if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator);
if (type == "operator" || type == ":") return cont(expression);
if (type == ";") return;
if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator);
if (type == ".") return cont(property, maybeoperator);
if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator);
}
function maybelabel(type) {
if (type == ":") return cont(poplex, statement);
return pass(maybeoperator, expect(";"), poplex);
}
function property(type) {
if (type == "variable") {cx.marked = "property"; return cont();}
}
function objprop(type) {
if (type == "variable") cx.marked = "property";
if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression);
}
function commasep(what, end) {
function proceed(type) {
if (type == ",") return cont(what, proceed);
if (type == end) return cont();
return cont(expect(end));
}
return function commaSeparated(type) {
if (type == end) return cont();
else return pass(what, proceed);
};
}
function block(type) {
if (type == "}") return cont();
return pass(statement, block);
}
function vardef1(type, value) {
if (type == "variable"){register(value); return cont(vardef2);}
return cont();
}
function vardef2(type, value) {
if (value == "=") return cont(expression, vardef2);
if (type == ",") return cont(vardef1);
}
function forspec1(type) {
if (type == "var") return cont(vardef1, forspec2);
if (type == ";") return pass(forspec2);
if (type == "variable") return cont(formaybein);
return pass(forspec2);
}
function formaybein(type, value) {
if (value == "in") return cont(expression);
return cont(maybeoperator, forspec2);
}
function forspec2(type, value) {
if (type == ";") return cont(forspec3);
if (value == "in") return cont(expression);
return cont(expression, expect(";"), forspec3);
}
function forspec3(type) {
if (type != ")") cont(expression);
}
function functiondef(type, value) {
if (type == "variable") {register(value); return cont(functiondef);}
if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, statement, popcontext);
}
function funarg(type, value) {
if (type == "variable") {register(value); return cont();}
}
// Interface
return {
startState: function(basecolumn) {
return {
tokenize: jsTokenBase,
reAllowed: true,
kwAllowed: true,
cc: [],
lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
localVars: parserConfig.localVars,
context: parserConfig.localVars && {vars: parserConfig.localVars},
indented: 0
};
},
token: function(stream, state) {
if (stream.sol()) {
if (!state.lexical.hasOwnProperty("align"))
state.lexical.align = false;
state.indented = stream.indentation();
}
if (stream.eatSpace()) return null;
var style = state.tokenize(stream, state);
if (type == "comment") return style;
state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/));
state.kwAllowed = type != '.';
return parseJS(state, style, type, content, stream);
},
indent: function(state, textAfter) {
if (state.tokenize != jsTokenBase) return 0;
var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;
if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev;
var type = lexical.type, closing = firstChar == type;
if (type == "vardef") return lexical.indented + 4;
else if (type == "form" && firstChar == "{") return lexical.indented;
else if (type == "stat" || type == "form") return lexical.indented + indentUnit;
else if (lexical.info == "switch" && !closing)
return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
else if (lexical.align) return lexical.column + (closing ? 0 : 1);
else return lexical.indented + (closing ? 0 : indentUnit);
},
electricChars: ":{}"
};
});
CodeMirror.defineMIME("text/javascript", "javascript");
CodeMirror.defineMIME("application/json", {name: "javascript", json: true});

View File

@@ -1,150 +0,0 @@
(function() {
function keywords(str) {
var obj = {}, words = str.split(" ");
for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
return obj;
}
function heredoc(delim) {
return function(stream, state) {
if (stream.match(delim)) state.tokenize = null;
else stream.skipToEnd();
return "string";
}
}
var phpConfig = {
name: "clike",
keywords: keywords("abstract and array as break case catch class clone const continue declare default " +
"do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " +
"for foreach function global goto if implements interface instanceof namespace " +
"new or private protected public static switch throw trait try use var while xor " +
"die echo empty exit eval include include_once isset list require require_once return " +
"print unset __halt_compiler self static parent"),
blockKeywords: keywords("catch do else elseif for foreach if switch try while"),
atoms: keywords("true false null TRUE FALSE NULL"),
multiLineStrings: true,
hooks: {
"$": function(stream, state) {
stream.eatWhile(/[\w\$_]/);
return "variable-2";
},
"<": function(stream, state) {
if (stream.match(/<</)) {
stream.eatWhile(/[\w\.]/);
state.tokenize = heredoc(stream.current().slice(3));
return state.tokenize(stream, state);
}
return false;
},
"#": function(stream, state) {
while (!stream.eol() && !stream.match("?>", false)) stream.next();
return "comment";
},
"/": function(stream, state) {
if (stream.eat("/")) {
while (!stream.eol() && !stream.match("?>", false)) stream.next();
return "comment";
}
return false;
}
}
};
CodeMirror.defineMode("php", function(config, parserConfig) {
var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true});
var jsMode = CodeMirror.getMode(config, "javascript");
var cssMode = CodeMirror.getMode(config, "css");
var phpMode = CodeMirror.getMode(config, phpConfig);
function dispatch(stream, state) { // TODO open PHP inside text/css
var isPHP = state.mode == "php";
if (stream.sol() && state.pending != '"') state.pending = null;
if (state.curMode == htmlMode) {
if (stream.match(/^<\?\w*/)) {
state.curMode = phpMode;
state.curState = state.php;
state.curClose = "?>";
state.mode = "php";
return "meta";
}
if (state.pending == '"') {
while (!stream.eol() && stream.next() != '"') {}
var style = "string";
} else if (state.pending && stream.pos < state.pending.end) {
stream.pos = state.pending.end;
var style = state.pending.style;
} else {
var style = htmlMode.token(stream, state.curState);
}
state.pending = null;
var cur = stream.current(), openPHP = cur.search(/<\?/);
if (openPHP != -1) {
if (style == "string" && /\"$/.test(cur) && !/\?>/.test(cur)) state.pending = '"';
else state.pending = {end: stream.pos, style: style};
stream.backUp(cur.length - openPHP);
} else if (style == "tag" && stream.current() == ">" && state.curState.context) {
if (/^script$/i.test(state.curState.context.tagName)) {
state.curMode = jsMode;
state.curState = jsMode.startState(htmlMode.indent(state.curState, ""));
state.curClose = /^<\/\s*script\s*>/i;
state.mode = "javascript";
}
else if (/^style$/i.test(state.curState.context.tagName)) {
state.curMode = cssMode;
state.curState = cssMode.startState(htmlMode.indent(state.curState, ""));
state.curClose = /^<\/\s*style\s*>/i;
state.mode = "css";
}
}
return style;
} else if ((!isPHP || state.php.tokenize == null) &&
stream.match(state.curClose, isPHP)) {
state.curMode = htmlMode;
state.curState = state.html;
state.curClose = null;
state.mode = "html";
if (isPHP) return "meta";
else return dispatch(stream, state);
} else {
return state.curMode.token(stream, state.curState);
}
}
return {
startState: function() {
var html = htmlMode.startState();
return {html: html,
php: phpMode.startState(),
curMode: parserConfig.startOpen ? phpMode : htmlMode,
curState: parserConfig.startOpen ? phpMode.startState() : html,
curClose: parserConfig.startOpen ? /^\?>/ : null,
mode: parserConfig.startOpen ? "php" : "html",
pending: null}
},
copyState: function(state) {
var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html),
php = state.php, phpNew = CodeMirror.copyState(phpMode, php), cur;
if (state.curState == html) cur = htmlNew;
else if (state.curState == php) cur = phpNew;
else cur = CodeMirror.copyState(state.curMode, state.curState);
return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur,
curClose: state.curClose, mode: state.mode,
pending: state.pending};
},
token: dispatch,
indent: function(state, textAfter) {
if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) ||
(state.curMode == phpMode && /^\?>/.test(textAfter)))
return htmlMode.indent(state.html, textAfter);
return state.curMode.indent(state.curState, textAfter);
},
electricChars: "/{}:"
}
}, "xml", "clike", "javascript", "css");
CodeMirror.defineMIME("application/x-httpd-php", "php");
CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true});
CodeMirror.defineMIME("text/x-php", phpConfig);
})();

View File

@@ -1,24 +0,0 @@
Copyright (c) 2011, Ubalo, 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 Ubalo, Inc. 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 UBALO, INC 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.

View File

@@ -1,200 +0,0 @@
CodeMirror.defineMode("ruby", function(config, parserConfig) {
function wordObj(words) {
var o = {};
for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;
return o;
}
var keywords = wordObj([
"alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else",
"elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or",
"redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless",
"until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc",
"caller", "lambda", "proc", "public", "protected", "private", "require", "load",
"require_relative", "extend", "autoload"
]);
var indentWords = wordObj(["def", "class", "case", "for", "while", "do", "module", "then",
"catch", "loop", "proc", "begin"]);
var dedentWords = wordObj(["end", "until"]);
var matching = {"[": "]", "{": "}", "(": ")"};
var curPunc;
function chain(newtok, stream, state) {
state.tokenize.push(newtok);
return newtok(stream, state);
}
function tokenBase(stream, state) {
curPunc = null;
if (stream.sol() && stream.match("=begin") && stream.eol()) {
state.tokenize.push(readBlockComment);
return "comment";
}
if (stream.eatSpace()) return null;
var ch = stream.next();
if (ch == "`" || ch == "'" || ch == '"' ||
(ch == "/" && !stream.eol() && stream.peek() != " ")) {
return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state);
} else if (ch == "%") {
var style, embed = false;
if (stream.eat("s")) style = "atom";
else if (stream.eat(/[WQ]/)) { style = "string"; embed = true; }
else if (stream.eat(/[wxqr]/)) style = "string";
var delim = stream.eat(/[^\w\s]/);
if (!delim) return "operator";
if (matching.propertyIsEnumerable(delim)) delim = matching[delim];
return chain(readQuoted(delim, style, embed, true), stream, state);
} else if (ch == "#") {
stream.skipToEnd();
return "comment";
} else if (ch == "<" && stream.eat("<")) {
stream.eat("-");
stream.eat(/[\'\"\`]/);
var match = stream.match(/^\w+/);
stream.eat(/[\'\"\`]/);
if (match) return chain(readHereDoc(match[0]), stream, state);
return null;
} else if (ch == "0") {
if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/);
else if (stream.eat("b")) stream.eatWhile(/[01]/);
else stream.eatWhile(/[0-7]/);
return "number";
} else if (/\d/.test(ch)) {
stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/);
return "number";
} else if (ch == "?") {
while (stream.match(/^\\[CM]-/)) {}
if (stream.eat("\\")) stream.eatWhile(/\w/);
else stream.next();
return "string";
} else if (ch == ":") {
if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state);
if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state);
stream.eatWhile(/[\w\?]/);
return "atom";
} else if (ch == "@") {
stream.eat("@");
stream.eatWhile(/[\w\?]/);
return "variable-2";
} else if (ch == "$") {
stream.next();
stream.eatWhile(/[\w\?]/);
return "variable-3";
} else if (/\w/.test(ch)) {
stream.eatWhile(/[\w\?]/);
if (stream.eat(":")) return "atom";
return "ident";
} else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) {
curPunc = "|";
return null;
} else if (/[\(\)\[\]{}\\;]/.test(ch)) {
curPunc = ch;
return null;
} else if (ch == "-" && stream.eat(">")) {
return "arrow";
} else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) {
stream.eatWhile(/[=+\-\/*:\.^%<>~|]/);
return "operator";
} else {
return null;
}
}
function tokenBaseUntilBrace() {
var depth = 1;
return function(stream, state) {
if (stream.peek() == "}") {
depth--;
if (depth == 0) {
state.tokenize.pop();
return state.tokenize[state.tokenize.length-1](stream, state);
}
} else if (stream.peek() == "{") {
depth++;
}
return tokenBase(stream, state);
};
}
function readQuoted(quote, style, embed, unescaped) {
return function(stream, state) {
var escaped = false, ch;
while ((ch = stream.next()) != null) {
if (ch == quote && (unescaped || !escaped)) {
state.tokenize.pop();
break;
}
if (embed && ch == "#" && !escaped && stream.eat("{")) {
state.tokenize.push(tokenBaseUntilBrace(arguments.callee));
break;
}
escaped = !escaped && ch == "\\";
}
return style;
};
}
function readHereDoc(phrase) {
return function(stream, state) {
if (stream.match(phrase)) state.tokenize.pop();
else stream.skipToEnd();
return "string";
};
}
function readBlockComment(stream, state) {
if (stream.sol() && stream.match("=end") && stream.eol())
state.tokenize.pop();
stream.skipToEnd();
return "comment";
}
return {
startState: function() {
return {tokenize: [tokenBase],
indented: 0,
context: {type: "top", indented: -config.indentUnit},
continuedLine: false,
lastTok: null,
varList: false};
},
token: function(stream, state) {
if (stream.sol()) state.indented = stream.indentation();
var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype;
if (style == "ident") {
var word = stream.current();
style = keywords.propertyIsEnumerable(stream.current()) ? "keyword"
: /^[A-Z]/.test(word) ? "tag"
: (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def"
: "variable";
if (indentWords.propertyIsEnumerable(word)) kwtype = "indent";
else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent";
else if ((word == "if" || word == "unless") && stream.column() == stream.indentation())
kwtype = "indent";
}
if (curPunc || (style && style != "comment")) state.lastTok = word || curPunc || style;
if (curPunc == "|") state.varList = !state.varList;
if (kwtype == "indent" || /[\(\[\{]/.test(curPunc))
state.context = {prev: state.context, type: curPunc || style, indented: state.indented};
else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev)
state.context = state.context.prev;
if (stream.eol())
state.continuedLine = (curPunc == "\\" || style == "operator");
return style;
},
indent: function(state, textAfter) {
if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0;
var firstChar = textAfter && textAfter.charAt(0);
var ct = state.context;
var closing = ct.type == matching[firstChar] ||
ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter);
return ct.indented + (closing ? 0 : config.indentUnit) +
(state.continuedLine ? config.indentUnit : 0);
},
electricChars: "}de" // enD and rescuE
};
});
CodeMirror.defineMIME("text/x-ruby", "ruby");

View File

@@ -1,325 +0,0 @@
CodeMirror.defineMode("xml", function(config, parserConfig) {
var indentUnit = config.indentUnit;
var Kludges = parserConfig.htmlMode ? {
autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,
'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,
'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,
'track': true, 'wbr': true},
implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,
'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,
'th': true, 'tr': true},
contextGrabbers: {
'dd': {'dd': true, 'dt': true},
'dt': {'dd': true, 'dt': true},
'li': {'li': true},
'option': {'option': true, 'optgroup': true},
'optgroup': {'optgroup': true},
'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,
'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,
'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,
'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,
'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},
'rp': {'rp': true, 'rt': true},
'rt': {'rp': true, 'rt': true},
'tbody': {'tbody': true, 'tfoot': true},
'td': {'td': true, 'th': true},
'tfoot': {'tbody': true},
'th': {'td': true, 'th': true},
'thead': {'tbody': true, 'tfoot': true},
'tr': {'tr': true}
},
doNotIndent: {"pre": true},
allowUnquoted: true,
allowMissing: false
} : {
autoSelfClosers: {},
implicitlyClosed: {},
contextGrabbers: {},
doNotIndent: {},
allowUnquoted: false,
allowMissing: false
};
var alignCDATA = parserConfig.alignCDATA;
// Return variables for tokenizers
var tagName, type;
function inText(stream, state) {
function chain(parser) {
state.tokenize = parser;
return parser(stream, state);
}
var ch = stream.next();
if (ch == "<") {
if (stream.eat("!")) {
if (stream.eat("[")) {
if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>"));
else return null;
}
else if (stream.match("--")) return chain(inBlock("comment", "-->"));
else if (stream.match("DOCTYPE", true, true)) {
stream.eatWhile(/[\w\._\-]/);
return chain(doctype(1));
}
else return null;
}
else if (stream.eat("?")) {
stream.eatWhile(/[\w\._\-]/);
state.tokenize = inBlock("meta", "?>");
return "meta";
}
else {
type = stream.eat("/") ? "closeTag" : "openTag";
stream.eatSpace();
tagName = "";
var c;
while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c;
state.tokenize = inTag;
return "tag";
}
}
else if (ch == "&") {
var ok;
if (stream.eat("#")) {
if (stream.eat("x")) {
ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";");
} else {
ok = stream.eatWhile(/[\d]/) && stream.eat(";");
}
} else {
ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";");
}
return ok ? "atom" : "error";
}
else {
stream.eatWhile(/[^&<]/);
return null;
}
}
function inTag(stream, state) {
var ch = stream.next();
if (ch == ">" || (ch == "/" && stream.eat(">"))) {
state.tokenize = inText;
type = ch == ">" ? "endTag" : "selfcloseTag";
return "tag";
}
else if (ch == "=") {
type = "equals";
return null;
}
else if (/[\'\"]/.test(ch)) {
state.tokenize = inAttribute(ch);
return state.tokenize(stream, state);
}
else {
stream.eatWhile(/[^\s\u00a0=<>\"\'\/?]/);
return "word";
}
}
function inAttribute(quote) {
return function(stream, state) {
while (!stream.eol()) {
if (stream.next() == quote) {
state.tokenize = inTag;
break;
}
}
return "string";
};
}
function inBlock(style, terminator) {
return function(stream, state) {
while (!stream.eol()) {
if (stream.match(terminator)) {
state.tokenize = inText;
break;
}
stream.next();
}
return style;
};
}
function doctype(depth) {
return function(stream, state) {
var ch;
while ((ch = stream.next()) != null) {
if (ch == "<") {
state.tokenize = doctype(depth + 1);
return state.tokenize(stream, state);
} else if (ch == ">") {
if (depth == 1) {
state.tokenize = inText;
break;
} else {
state.tokenize = doctype(depth - 1);
return state.tokenize(stream, state);
}
}
}
return "meta";
};
}
var curState, setStyle;
function pass() {
for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);
}
function cont() {
pass.apply(null, arguments);
return true;
}
function pushContext(tagName, startOfLine) {
var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent);
curState.context = {
prev: curState.context,
tagName: tagName,
indent: curState.indented,
startOfLine: startOfLine,
noIndent: noIndent
};
}
function popContext() {
if (curState.context) curState.context = curState.context.prev;
}
function element(type) {
if (type == "openTag") {
curState.tagName = tagName;
return cont(attributes, endtag(curState.startOfLine));
} else if (type == "closeTag") {
var err = false;
if (curState.context) {
if (curState.context.tagName != tagName) {
if (Kludges.implicitlyClosed.hasOwnProperty(curState.context.tagName.toLowerCase())) {
popContext();
}
err = !curState.context || curState.context.tagName != tagName;
}
} else {
err = true;
}
if (err) setStyle = "error";
return cont(endclosetag(err));
}
return cont();
}
function endtag(startOfLine) {
return function(type) {
if (type == "selfcloseTag" ||
(type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase()))) {
maybePopContext(curState.tagName.toLowerCase());
return cont();
}
if (type == "endTag") {
maybePopContext(curState.tagName.toLowerCase());
pushContext(curState.tagName, startOfLine);
return cont();
}
return cont();
};
}
function endclosetag(err) {
return function(type) {
if (err) setStyle = "error";
if (type == "endTag") { popContext(); return cont(); }
setStyle = "error";
return cont(arguments.callee);
}
}
function maybePopContext(nextTagName) {
var parentTagName;
while (true) {
if (!curState.context) {
return;
}
parentTagName = curState.context.tagName.toLowerCase();
if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) ||
!Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {
return;
}
popContext();
}
}
function attributes(type) {
if (type == "word") {setStyle = "attribute"; return cont(attribute, attributes);}
if (type == "endTag" || type == "selfcloseTag") return pass();
setStyle = "error";
return cont(attributes);
}
function attribute(type) {
if (type == "equals") return cont(attvalue, attributes);
if (!Kludges.allowMissing) setStyle = "error";
return (type == "endTag" || type == "selfcloseTag") ? pass() : cont();
}
function attvalue(type) {
if (type == "string") return cont(attvaluemaybe);
if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return cont();}
setStyle = "error";
return (type == "endTag" || type == "selfCloseTag") ? pass() : cont();
}
function attvaluemaybe(type) {
if (type == "string") return cont(attvaluemaybe);
else return pass();
}
return {
startState: function() {
return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, context: null};
},
token: function(stream, state) {
if (stream.sol()) {
state.startOfLine = true;
state.indented = stream.indentation();
}
if (stream.eatSpace()) return null;
setStyle = type = tagName = null;
var style = state.tokenize(stream, state);
state.type = type;
if ((style || type) && style != "comment") {
curState = state;
while (true) {
var comb = state.cc.pop() || element;
if (comb(type || style)) break;
}
}
state.startOfLine = false;
return setStyle || style;
},
indent: function(state, textAfter, fullLine) {
var context = state.context;
if ((state.tokenize != inTag && state.tokenize != inText) ||
context && context.noIndent)
return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0;
if (alignCDATA && /<!\[CDATA\[/.test(textAfter)) return 0;
if (context && /^<\//.test(textAfter))
context = context.prev;
while (context && !context.startOfLine)
context = context.prev;
if (context) return context.indent + indentUnit;
else return 0;
},
compareStates: function(a, b) {
if (a.indented != b.indented || a.tokenize != b.tokenize) return false;
for (var ca = a.context, cb = b.context; ; ca = ca.prev, cb = cb.prev) {
if (!ca || !cb) return ca == cb;
if (ca.tagName != cb.tagName) return false;
}
},
electricChars: "/"
};
});
CodeMirror.defineMIME("application/xml", "xml");
if (!CodeMirror.mimeModes.hasOwnProperty("text/html"))
CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true});

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,7 +1,4 @@
The MIT License
Copyright (c) 2011 Jeff Pickhardt
Modified from the Python CodeMirror mode, Copyright (c) 2010 Timothy Farrell
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
@@ -19,4 +16,4 @@ 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.
THE SOFTWARE.

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;}

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

@@ -2,23 +2,22 @@
http://lesscss.org/ dark theme
Ported to CodeMirror by Peter Kroon
*/
.CodeMirror{
line-height: 15px;
}
.cm-s-lesser-dark {
font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', Courier, monospace !important;
font-size:12px;
line-height: 1.3em;
}
.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; }
@@ -33,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; }
@@ -43,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 div.CodeMirror-selected { background: #a8f !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 { background: #0a001f; color: #f8f8f8; }
.cm-s-night div.CodeMirror-selected { background: #447 !important; }
.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;}

34
CodeMirror/theme/vibrant-ink.css vendored Normal file
View File

@@ -0,0 +1,34 @@
/* Taken from the popular Visual Studio Vibrant Ink Schema */
.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-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-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-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;}

View File

@@ -20,10 +20,14 @@ 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 { background: #0a001f; color: #f8f8f8; }
.cm-s-xq-dark span.CodeMirror-selected { background: #a8f !important; }
.cm-s-xq-dark .CodeMirror-gutter { background: #0a001f; border-right: 1px solid #aaa; }
.cm-s-xq-dark .CodeMirror-gutter-text { color: #f8f8f8; }
.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;}
@@ -38,9 +42,12 @@ THE SOFTWARE.
.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-error {color: #f00;}
.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,65 +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.
###Features you'd expect
* Context aware code highlighting
* Supports HTML, CSS, JavaScript, 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
<img src="https://icecoder.net/images/icecoder-v5-3-browser-code-editor.png" alt="ICEcoder web IDE">
###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, #ff0000 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
###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 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,185 +1,304 @@
<?php
include("lib/headers.php");
include("lib/settings.php");
$t = $text['editor'];
?>
<!DOCTYPE html>
<html style="margin: 0">
<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>CodeMirror 2: ICE Coders Editor of Choice</title>
<?php include("lib/settings.php");?>
<link rel="stylesheet" href="<?php echo $codeMirrorDir; ?>/lib/codemirror.css">
<script src="<?php echo $codeMirrorDir; ?>/lib/codemirror.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/mode/clike/clike.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/mode/css/css.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/mode/javascript/javascript.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/mode/xml/xml.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/mode/coffeescript/coffeescript.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/mode/php/php.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/mode/ruby/ruby.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/lib/util/searchcursor.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/lib/util/match-highlighter.js"></script>
<script src="<?php echo $codeMirrorDir; ?>/lib/util/foldcode.js"></script>
<title>ICEcoder v <?php echo $ICEcoder["versionNo"];?> editor</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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
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?microtime=<?php echo microtime(true);?>"></script>
<?php
if ($theme=="default") {
echo '<link rel="stylesheet" href="lib/editor.css">';
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>';
};?>
<?php
if (file_exists(dirname(__FILE__)."/plugins/responsive-helper/responsive-helper.js")) {
echo '<script src="plugins/responsive-helper/responsive-helper.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';};
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 {
echo '<link rel="stylesheet" href="'.$codeMirrorDir.'/theme/'.$theme.'.css">';
$activeLineBG = "#000";
}
?>
?>">
<style type="text/css">
.CodeMirror {position: absolute; width: 0; background-color: #fff; top: 0px; z-index: 1}
.CodeMirror-scroll {width: 100px; height: 100px;}
.cm-s-visible {display: block; top: 0}
.cm-s-hidden {display: none; top: 4000px}
.cm-s-activeLine {background: #002 !important;}
// Make sure this next one remains the 5th item, updated with JS
.cm-tab:after {position: relative; display: inline-block; width: 0; left: -1.4em; overflow: visible; color: #aaa; content: "<?php if ($visibleTabs) {?>\21e5<?;};?>";}
span.CodeMirror-matchhighlight {background: #555}
.CodeMirror-focused span.CodeMirror-matchhighlight {color: #000; background: #555; !important}
/* 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"];?>; line-height: 1.3; 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}
.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: #1d1d1b !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: #dddddd">
<?php if($_SESSION['userLevel'] == 10) {
echo '<div style="float: left; margin-right: 50px">'.PHP_EOL;
echo '<h2 style="color: rgba(0,198,255,0.7)">server</h2>'.PHP_EOL;
echo '<span style="color:#888">Server name, OS & IP:</span><br>'.PHP_EOL;
echo $_SERVER['SERVER_NAME'].' &nbsp;&nbsp; '.$_SERVER['SERVER_SOFTWARE'].' &nbsp;&nbsp; '.$_SERVER['SERVER_ADDR'].'<br><br>'.PHP_EOL;
echo '<span style="color:#888">Root:</span><br>'.PHP_EOL;
echo $_SERVER['DOCUMENT_ROOT'].'<br><br>'.PHP_EOL;
echo '<span style="color:#888">PHP version:</span><br>'.PHP_EOL;
echo phpversion().'<br><br>'.PHP_EOL;
echo '<span style="color:#888">File & folder count:</span><br>'.PHP_EOL;
echo '<div id="fileFolderCounts"></div><br>'.PHP_EOL;
echo '<span style="color:#888">Date & time:</span><br>'.PHP_EOL;
echo '<span id="serverDT"></span><br><br><br>'.PHP_EOL;
echo '</div>'.PHP_EOL;
<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>
echo '<div style="float: left">'.PHP_EOL;
echo '<h2 style="color: rgba(0,198,255,0.7)">files</h2>'.PHP_EOL;
echo '<span style="color:#888">Last 10 files opened:</span><br>'.PHP_EOL;
echo str_replace("|","/",str_replace(",","<br>",$last10Files)).'<br><br><br>'.PHP_EOL;
echo '</div>'.PHP_EOL;
<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 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 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>
echo '<div style="clear: both">'.PHP_EOL;
echo '<h2 style="color: rgba(0,198,255,0.7)">your device</h2>'.PHP_EOL;
echo '<span style="color:#888">Browser:</span><br>'.PHP_EOL;
echo $_SERVER['HTTP_USER_AGENT'].'<br><br>'.PHP_EOL;
echo '<span style="color:#888">Your IP:</span><br>'.PHP_EOL;
echo $_SERVER['REMOTE_ADDR'].PHP_EOL;
echo '</div>'.PHP_EOL;
}; ?>
<script>
var nDT=<?php echo time()*1000;?>;
setInterval(function(){
var s=(new Date(nDT+=1000)+'').split(' '),
d=s[2]*1,
t=s[4].split(':'),
p=t[0]>11?'pm':'am',
e=d%20==1|d==31?'st':d%20==2?'nd':d%20==3?'rd':'th';
t[0]=--t[0]%12+1;
document.getElementById('serverDT').innerHTML=[s[0],d+e,s[1],s[3],t.join(':')+p].join(' ');
},1000);
</script>
<div style="float: left">
<?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 '<div style="display: inline-block; margin-left: -39px; margin-top: -4px">'.$t['none'].'</div><br><br>';
} else {
$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></li>';
if ($i<count($last10FilesArray)-1) {echo PHP_EOL;};
}
}
;?></ul>
</div>
<div style="clear: both"></div>
<script>
var nDT=<?php echo time()*1000;?>;
setInterval(function(){
var s=(new Date(nDT+=1e3)+'').split(' '),
d=s[2]*1,
t=s[4].split(':'),
p=t[0]>11?'pm':'am',
e=d%20==1|d>30?'st':d%20==2?'nd':d%20==3?'rd':'th';
t[0]=--t[0]%12+1;
if (document.getElementById('serverDT')) {
document.getElementById('serverDT').innerHTML=[s[0],d+e,s[1],s[3],t.join(':')+p].join(' ');
}
},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];
var codeFold = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder,'<span style=\"display: inline-block; width: 13px; height: 13px; background-color: #b00; color: #fff; text-align: center; cursor: pointer\"><span style="position: relative; top: -1px">+</span></span> %N%');
var codeFold_JS_Coffee_PHP_Ruby = CodeMirror.newFoldFunction(CodeMirror.braceRangeFinder,'<span style=\"display: inline-block; width: 13px; height: 13px; background-color: #b00; color: #fff; text-align: center; cursor: pointer\"><span style="position: relative; top: -1px">+</span></span> %N%');
window['cM'+num] = CodeMirror(document.body, {
mode: "application/x-httpd-php",
lineNumbers: true,
lineWrapping: true,
indentUnit: 4,
tabSize: 4,
indentWithTabs: true,
electricChars: false,
onCursorActivity: function() {
top.ICEcoder.getCaretPosition();
top.ICEcoder.updateCharDisplay();
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab], null);
if(!window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].somethingSelected()) {
top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab] = window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line, "cm-s-activeLine");
}
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].matchHighlight("CodeMirror-matchhighlight");
top.ICEcoder.cssColorPreview();
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
},
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(instance, e) {
top.ICEcoder.redoChangedContent(e);
top.ICEcoder.findReplace('find',true,false);
top.ICEcoder.getCaretPosition();
top.ICEcoder.updateCharDisplay();
tok = window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getTokenAt(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor());
if (tok.string!=">") {lastString=tok.string};
if (e.type=="keyup"&&e.keyCode=="16"&&lastKeyCode=="190") {
canDoEndTag=true;
for (i=0;i<top.ICEcoder.tagNestExceptions.length;i++) {
if(top.ICEcoder.tagString!="script" && top.ICEcoder.tagString==top.ICEcoder.tagNestExceptions[i]) {
canDoEndTag=false;
}
}
if(top.ICEcoder.tagString.slice(0,1)=="/"||top.ICEcoder.tagString.slice(0,1)=="?") {
canDoEndTag=false;
}
if (!top.ICEcoder.codeAssist||fileName.indexOf(".js")>0||fileName.indexOf(".css")>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.htmlTagArray[top.ICEcoder.htmlTagArray.length-1] + ">";
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)) {
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].replaceSelection(endTag);
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setCursor(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line,window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().ch-top.ICEcoder.tagString.length-3);
} else if(top.ICEcoder.tagString=="html"||top.ICEcoder.tagString=="head") {
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].replaceSelection("\n\n"+endTag);
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setCursor(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line-1,numTabs);
} else {
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].replaceSelection("\n"+tabs+"\t\n"+tabs+endTag);
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setCursor(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line-1,numTabs);
}
}
};
lastKeyCode = e.keyCode;
},
onGutterClick: !fileName || (fileName && fileName.indexOf(".js") == -1 && fileName.indexOf(".coffee") == -1 && fileName.indexOf(".php") && fileName.indexOf(".rb") == -1) ? codeFold : codeFold_JS_Coffee_PHP_Ruby,
extraKeys: {
"Tab": function(cm) {CodeMirror.commands[top.tabsIndent ? "defaultTab" : "insertTab"](cm);},
"Shift-Tab": "indentLess"
}
});
// Now create the active line for this CodeMirror object
top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab] = window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(0, "cm-s-activeLine");
"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)});
// Before change
window['cM'+num] .on("beforeChange", function(thisCM, changeObj) {top.ICEcoder.cMonBeforeChange(thisCM,'cM'+num,changeObj,CodeMirror)});
window['cM'+num+'diff'] .on("beforeChange", function(thisCM, changeObj) {top.ICEcoder.cMonBeforeChange(thisCM,'cM'+num+'diff',changeObj,CodeMirror)});
// 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

BIN
favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

212
files.php
View File

@@ -1,177 +1,63 @@
<?php
function fileManager($directory, $return_link) {
$code = "";
// Generates a list of all directories, sub-directories, and files in $directory
// Remove trailing slash
if(substr($directory, -1) == "/" ) {$directory = substr($directory, 0, strlen($directory)-1);};
$code .= fileManager_dir($directory, $return_link);
return $code;
}
include("lib/headers.php");
include("lib/settings.php");
$t = $text['files'];
function fileManager_dir($directory, $return_link, $first_call=true) {
if (!isset($_SESSION['restrictedFiles'])) {include("lib/settings.php");};
$restrictedFiles = $_SESSION['restrictedFiles'];
$bannedFiles = $_SESSION['bannedFiles'];
$docRoot = str_replace("\\","/",$_SERVER['DOCUMENT_ROOT']);
if (strrpos($_SERVER['DOCUMENT_ROOT'],":")) {
$serverType = "Windows";
} else {
$serverType = "Linux";
}
// Chop off trailing slash
if (strrpos($docRoot,"/")==strlen($docRoot)-1) {$docRoot = substr($docRoot,0,strlen($docRoot)-1);};
$fileManager = "";
// Recursive function called by fileManager() to list directories/files
// Get and sort directories/files
if(function_exists("scandir")) {$file = scandir($directory);} else {$file = php4_scandir($directory);};
natcasesort($file);
// Make directories first
$files = $dirs = array();
foreach($file as $this_file) {
if(is_dir("$directory/$this_file")) {$dirs[] = $this_file;} else {$files[] = $this_file;};
}
$file = array_merge($dirs, $files);
// Filter unwanted files
if(!empty($bannedFiles)) {
foreach(array_keys($file) as $key) {
$fileFolder = $file[$key];
for ($i=0;$i<count($bannedFiles);$i++) {
if(strpos($fileFolder,$bannedFiles[$i])!==false) {unset($file[$key]);};
}
}
}
if(count($file) > 2) { // To ignore . and .. directories
if($first_call) {
// Root Directory
$dirRep = str_replace("\\","/",$directory);
$link = str_replace("[link]", "$dirRep/", $return_link);
$link = str_replace("//","/",$link);
$fileAtts = "";
if ($serverType=="Linux") {
$chmodInfo = substr(sprintf('%o', fileperms($link)), -4);
$fileAtts = '<span style="color: #888; font-size: 8px">'.$chmodInfo.'</span>';
}
$fileManager = "<ul class=\"fileManager\">";
$fileManager .= "<li class=\"pft-directory\"><a href=\"#\" onMouseOver=\"top.ICEcoder.overFileFolder('folder','$link')\" onMouseOut=\"top.ICEcoder.overFileFolder('folder','')\" style=\"position: relative; left:-22px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span id=\"|\">/ [ROOT]</span> ".$fileAtts."</a>";
$fileManager .= $fileManager .= fileManager_dir("$directory/", $return_link ,false);
$fileManager .= "</li>";
$first_call = false;
} else {
$fileManager = "<ul>";
}
foreach( $file as $this_file ) {
$bannedFile=false;
for ($i=0;$i<count($bannedFiles);$i++) {
if (strpos($directory,$bannedFiles[$i])!=""||strpos($this_file,$bannedFiles[$i])!="") {
$bannedFile=true;
}
}
if( $this_file != "." && $this_file != ".." && $bannedFile == false) {
if( is_dir("$directory/$this_file") ) {
// Directory
$dirCount++;
$dirRep = str_replace("\\","/",$directory);
$link = str_replace("[link]", "$dirRep/" . urlencode($this_file), $return_link);
$link = str_replace("//","/",$link);
$restrictedFile=false;
for ($i=0;$i<count($restrictedFiles);$i++) {
if (strpos($link,$restrictedFiles[$i])!="") {
$restrictedFile=true;
}
}
$fileAtts = "";
if ($serverType=="Linux") {
$chmodInfo = substr(sprintf('%o', fileperms($link)), -4);
$fileAtts = '<span style="color: #888; font-size: 8px">'.$chmodInfo.'</span>';
}
if ($_SESSION['userLevel'] == 10 || ($_SESSION['userLevel'] < 10 && $restrictedFile==false)) {
$fileManager .= "<li class=\"pft-directory\"><a href=\"#\" onMouseOver=\"top.ICEcoder.overFileFolder('folder','$link')\" onMouseOut=\"top.ICEcoder.overFileFolder('folder','')\" style=\"position: relative; left:-22px\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span id=\"".str_replace("/","|",str_replace($docRoot,"",$link))."\">" . htmlspecialchars($this_file) . "</span> ".$fileAtts."</a>";
$fileManager .= fileManager_dir("$directory/$this_file", $return_link , false);
$fileManager .= "</li>";
} else {
$fileManager .= "<li class=\"pft-directory\" style=\"cursor: pointer\"><span style=\"position: relative; left:-22px; color: #888\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [HIDDEN] ".$fileAtts."</span></li>";
}
} else {
// File
$fileCount++;
$fileBytes+=filesize($link);
// Get extension (prefix 'ext-' to prevent invalid classes from extensions that begin with numbers)
$ext = "ext-" . substr($this_file, strrpos($this_file, ".") + 1);
$dirRep = str_replace("\\","/",$directory);
$link = str_replace("[link]", "$dirRep/" . urlencode($this_file), $return_link);
$link = str_replace("//","/",$link);
$restrictedFile=false;
for ($i=0;$i<count($restrictedFiles);$i++) {
if (strpos($link,$restrictedFiles[$i])!="") {
$restrictedFile=true;
}
}
if ($_SESSION['userLevel'] == 10 || ($_SESSION['userLevel'] < 10 && $restrictedFile==false)) {
$fileAtts = "";
if ($serverType=="Linux") {
$chmodInfo = substr(sprintf('%o', fileperms($link)), -4);
$fileAtts = '<span style="color: #888; font-size: 8px">'.$chmodInfo.'</span>';
}
$fileManager .= "<li class=\"pft-file " . strtolower($ext) . "\"><a nohref onMouseOver=\"top.ICEcoder.overFileFolder('file','$link')\" onMouseOut=\"top.ICEcoder.overFileFolder('file','')\" style=\"position: relative; left:-22px; cursor: pointer\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span id=\"".str_replace("/","|",str_replace($docRoot,"",$link))."\">" . htmlspecialchars($this_file) . "</span> ".$fileAtts."</a></li>";
} else {
$fileAtts = "<img src=\"images/padlock.png\" style=\"cursor: pointer\" onClick=\"alert('Sorry, you need higher admin level rights to view.')\">";
$fileManager .= "<li class=\"pft-file " . strtolower($ext) . "\" style=\"cursor: default\"><span style=\"position: relative; left:-22px; color: #888\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [HIDDEN] ".$fileAtts."</span></li>";
}
}
}
}
$fileManager .= "</ul>";
}
$varOutput = "";
if ($dirCount) {$varOutput .= "top.ICEcoder.dirCount+=".$dirCount.";".PHP_EOL;};
if ($fileCount) {$varOutput .= "top.ICEcoder.fileCount+=".$fileCount.";".PHP_EOL;};
if ($fileBytes) {$varOutput .= "top.ICEcoder.fileBytes+=".$fileBytes.";".PHP_EOL;};
// After outputting the fileManager, output the JS vars, but only the first time
return $fileManager."<script>if (top.ICEcoder.dirCount==0) {".PHP_EOL.$varOutput."}</script>";
}
// For PHP4 compatibility
function php4_scandir($dir) {
$dh = opendir($dir);
while( false !== ($filename = readdir($dh)) ) {
$files[] = $filename;
}
sort($files);
return($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="top.ICEcoder.getMouseXY(event);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>ICE Coder File Manager</title>
<link rel="stylesheet" type="text/css" href="lib/files.css">
<script src="lib/coder.js" type="text/javascript"></script>
<title>ICEcoder v <?php echo $ICEcoder["versionNo"];?> file manager</title>
<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>
<!--Updated via settings so must remain 4th stylesheet//-->
<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 onClick="top.ICEcoder.refreshFileManager()" class="refresh"><img src="images/refresh.png"></div>
<script>
top.ICEcoder.dirCount = 0;
top.ICEcoder.fileCount = 0;
top.ICEcoder.fileBytes = 0;
</script>
<?php
<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);">
echo fileManager($_SERVER['DOCUMENT_ROOT'], "[link]");
<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
$_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>";
}
echo '<div title="GitHub" onClick="top.ICEcoder.githubDiffToggle()" class="github'.$classExtra.'"></div>';
}
?>
<iframe name="fileControl" style="display: none"></iframe>
<ul class="fileManager">
<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>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 55 B

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: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 842 B

BIN
images/files-arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 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: 1.1 KiB

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: 512 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 982 B

370
index.php
View File

@@ -1,177 +1,327 @@
<?php
include("lib/headers.php");
include("lib/settings.php");
$allowedIP = false;
for($i=0;$i<count($_SESSION['allowedIPs']);$i++) {
if ($_SESSION['allowedIPs'][$i]==$_SERVER["REMOTE_ADDR"]||$_SESSION['allowedIPs'][$i]=="*") {
$allowedIP = true;
}
}
if (!$allowedIP) {
$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");
};
// Test for latest CodeMirror version
if ($testcMVersion) {
$cMLatestVer = json_encode(file_get_contents("http://codemirror.net/latest-version.txt"));
$cMLatestVer = rtrim(ltrim($cMLatestVer,"\""),"\"\\n");
if ($cMThisVer<$cMLatestVer) {
echo '<script>alert(\'Code Mirror '.$cMLatestVer.' now released\n\nPlease upgrade\');</script>';
$updateMsg = '';
// Check for updates
if ($ICEcoder["checkUpdates"]) {
$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>
<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>ICE Coder - <?php echo $versionNo;?></title>
<title>ICEcoder v <?php echo $ICEcoder["versionNo"];?></title>
<!--Updated via settings so must remain 1st stylesheet//-->
<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/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>
shortURLStarts = "<?php echo $shortURLStarts;?>";
theme = "<?php if ($theme=="default") {echo 'icecoder';} else {echo $theme;};?>";
tabsIndent = <?php if ($tabsIndent) {echo 'true';} else {echo 'false';};?>;
<?
$docRoot = str_replace("\\","/",$_SERVER['DOCUMENT_ROOT']);
if (strrpos($docRoot,"/")==strlen($docRoot)-1) {$docRoot = substr($docRoot,0,strlen($docRoot)-1);};
echo 'fullPath = "'.$docRoot.'";'.PHP_EOL;
?>
iceRoot = "<?php echo $ICEcoder['root']; ?>";
window.onbeforeunload = function() {
for (var i=0; i<=top.ICEcoder.changedContent.length; i++) {
if (top.ICEcoder.changedContent[i]==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...'];?>";
}
previousFiles = [<?php
if ($previousFiles!="" && $_SESSION['userLevel'] == 10) {
$openFilesArray = explode(",",$previousFiles);
for ($i=0;$i<count($openFilesArray);$i++) {
echo "'".$openFilesArray[$i]."'";
if ($i<count($openFilesArray)-1) {echo ",";};
}
}
?>];
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/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="ICEcoder.init(<?php if ($_SESSION['userLevel'] == 10) {echo "'login'";} ?>)<?php echo $onLoadExtras;?>" onResize="ICEcoder.setLayout()" onMouseMove="top.ICEcoder.getMouseXY(event);top.ICEcoder.canResizeFilesW()" onMouseDown="top.ICEcoder.mouseDown=true" onMouseUp="top.ICEcoder.mouseDown=false" onKeyDown="return ICEcoder.interceptKeys('coder', event);" onKeyUp="parent.ICEcoder.resetKeys(event);">
<body onLoad="<?php
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)">
<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">
<span class="progressBar"></span>
<div id="loadingMask" class="blackMask" style="visibility: visible" onContextMenu="return false">
<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')">
<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>
<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="document.getElementById('fileMenu').style.display='inline-block'">New File</a>
<a href="javascript:top.ICEcoder.newFolder()" onMouseOver="document.getElementById('fileMenu').style.display='inline-block'">New Folder</a>
<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.deleteFile(top.ICEcoder.rightClickedFile)" onMouseOver="document.getElementById('fileMenu').style.display='inline-block'">Delete</a>
<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.rightClickedFile)" onMouseOver="document.getElementById('fileMenu').style.display='inline-block'">Rename</a>
<a href="javascript:window.open(top.ICEcoder.rightClickedFile.substr((top.ICEcoder.rightClickedFile.indexOf(shortURLStarts)+top.shortURLStarts.length),top.ICEcoder.rightClickedFile.length))" onMouseOver="document.getElementById('fileMenu').style.display='inline-block'">View Webpage</a>
<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 id="header" class="header" onContextMenu="return false">
<div class="plugins" id="pluginsContainer">
<?php echo $pluginsDisplay; ?>
</div>
<div class="version"><?php echo $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('show')" onContextMenu="ICEcoder.settingsScreen('show')">
</div>
<div id="header" class="header" onContextMenu="return false"></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="accountLoginContainer" id="accountLoginContainer">
<div class="accountLogin" id="accountLogin">
<form name="login" action="lib/settings.php" method="POST" target="ff">
<input type="password" name="loginPassword" class="accountPassword">
<input type="submit" name="submit" value="Login" class="button">
</form>
</div>
</div>
<div class="accountOptions">
<a nohref title="Save" onClick="ICEcoder.fMIcon('save')"><img src="images/save.png" alt="Save" id="fMSave" style="opacity: 0.3"></a>
<a nohref title="Open" onClick="ICEcoder.fMIcon('open')"><img src="images/open.png" alt="Open" id="fMOpen" style="margin-left: 7px; opacity: 0.3"></a>
<a nohref title="New File" onClick="ICEcoder.fMIcon('newFile')"><img src="images/new-file.png" alt="New File" id="fMNewFile" style="margin: 8px 0 0 10px; opacity: 0.3"></a>
<a nohref title="New Folder" onClick="ICEcoder.fMIcon('newFolder')"><img src="images/new-folder.png" alt="New Folder" id="fMNewFolder" style="margin: 9px 0 0 5px; opacity: 0.3"></a>
<a nohref title="Delete" onClick="ICEcoder.fMIcon('delete')"><img src="images/delete.png" alt="Delete" id="fMDelete" style="margin: 9px 0 0 5px; opacity: 0.3"></a>
<a nohref title="Rename" onClick="ICEcoder.fMIcon('rename')"><img src="images/rename.png" alt="Rename" id="fMRename" style="margin: 9px 0 0 5px; opacity: 0.3"></a>
<a nohref title="View" onClick="ICEcoder.fMIcon('view')"><img src="images/view.png" alt="View" id="fMView" style="margin: 9px 0 0 5px; opacity: 0.3"></a>
</div>
<a nohref style="cursor: pointer" onClick="ICEcoder.lockUnlockNav()"><img src="images/padlock.png" id="fmLock" class="lock"></a>
<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>
<iframe id="filesFrame" class="frame" name="ff" src="files.php" style="opacity: 0" onLoad="this.style.opacity='1'"></iframe>
<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>
<div class="serverMessage" id="serverMessage"></div>
</div>
<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" onClick="if(ICEcoder.canSwitchTabs) {ICEcoder.switchTab('.$i.')} else {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">
<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="findTextPlural">'s</div>
<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="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)">
<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="button" name="submit" value="&gt;&gt;" class="submit" onClick="ICEcoder.findReplace('findReplace',false,true)">
<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>
<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="versionsDisplay" id="versionsDisplay" onclick="top.ICEcoder.versionsScreen(top.ICEcoder.openFiles[top.ICEcoder.selectedTab-1].replace(/\//g,'|'))"></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>

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