Merge branch 'develop' of github.com:ether/etherpad-lite into develop
This commit is contained in:
commit
4fa47ea969
|
@ -1,6 +1,31 @@
|
||||||
# Developer Guidelines
|
# Developer Guidelines
|
||||||
(Please talk to people on the mailing list before you change this page, see our section on [how to get in touch](https://github.com/ether/etherpad-lite#get-in-touch))
|
(Please talk to people on the mailing list before you change this page, see our section on [how to get in touch](https://github.com/ether/etherpad-lite#get-in-touch))
|
||||||
|
|
||||||
|
## How to write a bug report
|
||||||
|
|
||||||
|
* Please be polite, we all are humans and problems can occur.
|
||||||
|
* Please add as much information as possible, for example
|
||||||
|
* client os(s) and version(s)
|
||||||
|
* browser(s) and version(s), is the problem reproduceable on different clients
|
||||||
|
* special environments like firewalls or antivirus
|
||||||
|
* host os and version
|
||||||
|
* npm and nodejs version
|
||||||
|
* Logfiles if available
|
||||||
|
* steps to reproduce
|
||||||
|
* what you expected to happen
|
||||||
|
* what actually happened
|
||||||
|
* Please format logfiles and code examples with markdown see github Markdown help below the issue textarea for more information.
|
||||||
|
|
||||||
|
If you send logfiles, please set the loglevel switch DEBUG in your settings.json file:
|
||||||
|
|
||||||
|
```
|
||||||
|
/* The log level we are using, can be: DEBUG, INFO, WARN, ERROR */
|
||||||
|
"loglevel": "DEBUG",
|
||||||
|
```
|
||||||
|
|
||||||
|
The logfile location is defined in startup script or the log is directly shown in the commandline after you have started etherpad.
|
||||||
|
|
||||||
|
|
||||||
## Important note for pull requests
|
## Important note for pull requests
|
||||||
**Pull requests should be issued against the develop branch**. We never pull directly into master.
|
**Pull requests should be issued against the develop branch**. We never pull directly into master.
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
"pad.settings.padSettings": "Pad Settings",
|
"pad.settings.padSettings": "Pad Settings",
|
||||||
"pad.settings.myView": "My View",
|
"pad.settings.myView": "My View",
|
||||||
"pad.settings.stickychat": "Chat always on screen",
|
"pad.settings.stickychat": "Chat always on screen",
|
||||||
|
"pad.settings.chatandusers": "Show Chat and Users",
|
||||||
"pad.settings.colorcheck": "Authorship colors",
|
"pad.settings.colorcheck": "Authorship colors",
|
||||||
"pad.settings.linenocheck": "Line numbers",
|
"pad.settings.linenocheck": "Line numbers",
|
||||||
"pad.settings.rtlcheck": "Read content from right to left?",
|
"pad.settings.rtlcheck": "Read content from right to left?",
|
||||||
|
@ -120,6 +121,7 @@
|
||||||
|
|
||||||
"timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) one: author, other: authors ]}",
|
"timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) one: author, other: authors ]}",
|
||||||
"pad.savedrevs.marked": "This revision is now marked as a saved revision",
|
"pad.savedrevs.marked": "This revision is now marked as a saved revision",
|
||||||
|
"pad.savedrevs.timeslider": "You can see saved revisions by visiting the timeslider",
|
||||||
"pad.userlist.entername": "Enter your name",
|
"pad.userlist.entername": "Enter your name",
|
||||||
"pad.userlist.unnamed": "unnamed",
|
"pad.userlist.unnamed": "unnamed",
|
||||||
"pad.userlist.guest": "Guest",
|
"pad.userlist.guest": "Guest",
|
||||||
|
|
|
@ -30,8 +30,6 @@ function getPadHTML(pad, revNum, callback)
|
||||||
var html;
|
var html;
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
// fetch revision atext
|
// fetch revision atext
|
||||||
|
|
||||||
|
|
||||||
function (callback)
|
function (callback)
|
||||||
{
|
{
|
||||||
if (revNum != undefined)
|
if (revNum != undefined)
|
||||||
|
@ -416,6 +414,7 @@ function getHTMLFromAtext(pad, atext, authorColors)
|
||||||
var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport",
|
var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport",
|
||||||
{
|
{
|
||||||
line: line,
|
line: line,
|
||||||
|
lineContent: lineContent,
|
||||||
apool: apool,
|
apool: apool,
|
||||||
attribLine: attribLines[i],
|
attribLine: attribLines[i],
|
||||||
text: textLines[i]
|
text: textLines[i]
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
"etherpad-require-kernel" : "1.0.7",
|
"etherpad-require-kernel" : "1.0.7",
|
||||||
"resolve" : "1.0.0",
|
"resolve" : "1.0.0",
|
||||||
"socket.io" : "1.3.2",
|
"socket.io" : "1.3.2",
|
||||||
"ueberDB" : "0.2.10",
|
"ueberDB" : "0.2.11",
|
||||||
"express" : "3.8.1",
|
"express" : "3.8.1",
|
||||||
"async" : "0.9.0",
|
"async" : "0.9.0",
|
||||||
"connect" : "2.7.11",
|
"connect" : "2.7.11",
|
||||||
|
@ -55,5 +55,5 @@
|
||||||
"repository" : { "type" : "git",
|
"repository" : { "type" : "git",
|
||||||
"url" : "http://github.com/ether/etherpad-lite.git"
|
"url" : "http://github.com/ether/etherpad-lite.git"
|
||||||
},
|
},
|
||||||
"version" : "1.5.0"
|
"version" : "1.5.1"
|
||||||
}
|
}
|
||||||
|
|
|
@ -914,6 +914,36 @@ input[type=checkbox] {
|
||||||
border-left: 1px solid #ccc !important;
|
border-left: 1px solid #ccc !important;
|
||||||
width: 185px !important;
|
width: 185px !important;
|
||||||
}
|
}
|
||||||
|
.chatAndUsers{
|
||||||
|
display:block !important;
|
||||||
|
right:0px !important;
|
||||||
|
border-radius:0px !important;
|
||||||
|
width:182px !important;
|
||||||
|
margin:2px 0 0 0 !important;
|
||||||
|
border: none !important;
|
||||||
|
border-bottom: 1px solid #ccc !important;
|
||||||
|
height:155px !important;
|
||||||
|
border-left: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
.chatAndUsers > #otherusers{
|
||||||
|
max-height: 100px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
.chatAndUsersChat > div > #titlecross{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.chatAndUsersChat{
|
||||||
|
bottom:0px !important;
|
||||||
|
padding:0 !important;
|
||||||
|
margin:0 !important;
|
||||||
|
right:0 !important;
|
||||||
|
top: 200px !important;
|
||||||
|
width:182px !important;
|
||||||
|
border: none !important;
|
||||||
|
padding:5px !important;
|
||||||
|
border-left: 1px solid #ccc !important;
|
||||||
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 600px) {
|
@media screen and (max-width: 600px) {
|
||||||
.toolbar ul li.separator {
|
.toolbar ul li.separator {
|
||||||
display: none;
|
display: none;
|
||||||
|
|
|
@ -21,6 +21,17 @@
|
||||||
*/
|
*/
|
||||||
var _, $, jQuery, plugins, Ace2Common;
|
var _, $, jQuery, plugins, Ace2Common;
|
||||||
|
|
||||||
|
var browser = require('./browser').browser;
|
||||||
|
if(browser.msie){
|
||||||
|
// Honestly fuck IE royally.
|
||||||
|
// Basically every hack we have since V11 causes a problem
|
||||||
|
if(parseInt(browser.version) >= 11){
|
||||||
|
delete browser.msie;
|
||||||
|
browser.chrome = true;
|
||||||
|
browser.modernIE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ace2Common = require('./ace2_common');
|
Ace2Common = require('./ace2_common');
|
||||||
|
|
||||||
plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
|
plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
|
||||||
|
@ -35,7 +46,6 @@ var isNodeText = Ace2Common.isNodeText,
|
||||||
htmlPrettyEscape = Ace2Common.htmlPrettyEscape,
|
htmlPrettyEscape = Ace2Common.htmlPrettyEscape,
|
||||||
noop = Ace2Common.noop;
|
noop = Ace2Common.noop;
|
||||||
var hooks = require('./pluginfw/hooks');
|
var hooks = require('./pluginfw/hooks');
|
||||||
var browser = require('./browser').browser;
|
|
||||||
|
|
||||||
function Ace2Inner(){
|
function Ace2Inner(){
|
||||||
|
|
||||||
|
@ -2960,7 +2970,6 @@ function Ace2Inner(){
|
||||||
{
|
{
|
||||||
return "";
|
return "";
|
||||||
};
|
};
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3584,8 +3593,7 @@ function Ace2Inner(){
|
||||||
// On Mac and Linux, move right moves to end of word and move left moves to start;
|
// On Mac and Linux, move right moves to end of word and move left moves to start;
|
||||||
// on Windows, always move to start of word.
|
// on Windows, always move to start of word.
|
||||||
// On Windows, Firefox and IE disagree on whether to stop for punctuation (FF says no).
|
// On Windows, Firefox and IE disagree on whether to stop for punctuation (FF says no).
|
||||||
/*
|
if (browser.msie && forwardNotBack)
|
||||||
if (browser.windows && forwardNotBack)
|
|
||||||
{
|
{
|
||||||
while ((!isDone()) && isWordChar(nextChar()))
|
while ((!isDone()) && isWordChar(nextChar()))
|
||||||
{
|
{
|
||||||
|
@ -3607,7 +3615,6 @@ function Ace2Inner(){
|
||||||
advance();
|
advance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -3627,7 +3634,6 @@ function Ace2Inner(){
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is caret potentially hidden by the chat button?
|
// Is caret potentially hidden by the chat button?
|
||||||
var myselection = document.getSelection(); // get the current caret selection
|
var myselection = document.getSelection(); // get the current caret selection
|
||||||
var caretOffsetTop = myselection.focusNode.parentNode.offsetTop | myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214
|
var caretOffsetTop = myselection.focusNode.parentNode.offsetTop | myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214
|
||||||
|
@ -3665,7 +3671,6 @@ function Ace2Inner(){
|
||||||
var specialHandled = false;
|
var specialHandled = false;
|
||||||
var isTypeForSpecialKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress"));
|
var isTypeForSpecialKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress"));
|
||||||
var isTypeForCmdKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress"));
|
var isTypeForCmdKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress"));
|
||||||
|
|
||||||
var stopped = false;
|
var stopped = false;
|
||||||
|
|
||||||
inCallStackIfNecessary("handleKeyEvent", function()
|
inCallStackIfNecessary("handleKeyEvent", function()
|
||||||
|
@ -3915,10 +3920,10 @@ function Ace2Inner(){
|
||||||
// only move the viewport if we're at the bottom of the viewport, if we hit down any other time the viewport shouldn't change
|
// only move the viewport if we're at the bottom of the viewport, if we hit down any other time the viewport shouldn't change
|
||||||
// NOTE: This behavior only fires if Chrome decides to break the page layout after a paste, it's annoying but nothing I can do
|
// NOTE: This behavior only fires if Chrome decides to break the page layout after a paste, it's annoying but nothing I can do
|
||||||
var selection = getSelection();
|
var selection = getSelection();
|
||||||
top.console.log("line #", rep.selStart[0]); // the line our caret is on
|
// top.console.log("line #", rep.selStart[0]); // the line our caret is on
|
||||||
top.console.log("firstvisible", visibleLineRange[0]); // the first visiblel ine
|
// top.console.log("firstvisible", visibleLineRange[0]); // the first visiblel ine
|
||||||
top.console.log("lastVisible", visibleLineRange[1]); // the last visible line
|
// top.console.log("lastVisible", visibleLineRange[1]); // the last visible line
|
||||||
top.console.log(rep.selStart[0], visibleLineRange[1], rep.selStart[0], visibleLineRange[0]);
|
// top.console.log(rep.selStart[0], visibleLineRange[1], rep.selStart[0], visibleLineRange[0]);
|
||||||
var newY = viewport.top + lineHeight;
|
var newY = viewport.top + lineHeight;
|
||||||
}
|
}
|
||||||
if(newY){
|
if(newY){
|
||||||
|
@ -3952,7 +3957,7 @@ function Ace2Inner(){
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is part of multi-keystroke international character on Firefox Mac
|
// Is part of multi-keystroke international character on Firefox Mac
|
||||||
var isFirefoxHalfCharacter = (browser.mozilla && evt.altKey && charCode === 0 && keyCode === 0);
|
var isFirefoxHalfCharacter = (browser.firefox && evt.altKey && charCode === 0 && keyCode === 0);
|
||||||
|
|
||||||
// Is part of multi-keystroke international character on Safari Mac
|
// Is part of multi-keystroke international character on Safari Mac
|
||||||
var isSafariHalfCharacter = (browser.safari && evt.altKey && keyCode == 229);
|
var isSafariHalfCharacter = (browser.safari && evt.altKey && keyCode == 229);
|
||||||
|
@ -4267,12 +4272,6 @@ function Ace2Inner(){
|
||||||
end.collapse(false);
|
end.collapse(false);
|
||||||
selection.startPoint = pointFromCollapsedRange(start);
|
selection.startPoint = pointFromCollapsedRange(start);
|
||||||
selection.endPoint = pointFromCollapsedRange(end);
|
selection.endPoint = pointFromCollapsedRange(end);
|
||||||
/*if ((!selection.startPoint.node.isText) && (!selection.endPoint.node.isText)) {
|
|
||||||
console.log(selection.startPoint.node.uniqueId()+","+
|
|
||||||
selection.startPoint.index+" / "+
|
|
||||||
selection.endPoint.node.uniqueId()+","+
|
|
||||||
selection.endPoint.index);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
return selection;
|
return selection;
|
||||||
}
|
}
|
||||||
|
@ -4684,7 +4683,7 @@ function Ace2Inner(){
|
||||||
setIfNecessary(iframe.style, "width", newWidth + "px");
|
setIfNecessary(iframe.style, "width", newWidth + "px");
|
||||||
setIfNecessary(sideDiv.style, "height", newHeight + "px");
|
setIfNecessary(sideDiv.style, "height", newHeight + "px");
|
||||||
}
|
}
|
||||||
if (browser.mozilla)
|
if (browser.firefox)
|
||||||
{
|
{
|
||||||
if (!doesWrap)
|
if (!doesWrap)
|
||||||
{
|
{
|
||||||
|
@ -4870,7 +4869,7 @@ function Ace2Inner(){
|
||||||
})
|
})
|
||||||
|
|
||||||
// CompositionEvent is not implemented below IE version 8
|
// CompositionEvent is not implemented below IE version 8
|
||||||
if ( !(browser.msie && parseInt(browser.version) < 9) && document.documentElement)
|
if ( !(browser.msie && parseInt(browser.version <= 9)) && document.documentElement)
|
||||||
{
|
{
|
||||||
$(document.documentElement).on("compositionstart", handleCompositionEvent);
|
$(document.documentElement).on("compositionstart", handleCompositionEvent);
|
||||||
$(document.documentElement).on("compositionend", handleCompositionEvent);
|
$(document.documentElement).on("compositionend", handleCompositionEvent);
|
||||||
|
@ -5333,20 +5332,9 @@ function Ace2Inner(){
|
||||||
{
|
{
|
||||||
var body = doc.getElementById("innerdocbody");
|
var body = doc.getElementById("innerdocbody");
|
||||||
root = body; // defined as a var in scope outside
|
root = body; // defined as a var in scope outside
|
||||||
if (browser.mozilla) $(root).addClass("mozilla");
|
if (browser.firefox) $(root).addClass("mozilla");
|
||||||
if (browser.safari) $(root).addClass("safari");
|
if (browser.safari) $(root).addClass("safari");
|
||||||
if (browser.msie) $(root).addClass("msie");
|
if (browser.msie) $(root).addClass("msie");
|
||||||
if (browser.msie)
|
|
||||||
{
|
|
||||||
// cache CSS background images
|
|
||||||
try
|
|
||||||
{
|
|
||||||
doc.execCommand("BackgroundImageCache", false, true);
|
|
||||||
}
|
|
||||||
catch (e)
|
|
||||||
{ /* throws an error in some IE 6 but not others! */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setClassPresence(root, "authorColors", true);
|
setClassPresence(root, "authorColors", true);
|
||||||
setClassPresence(root, "doesWrap", doesWrap);
|
setClassPresence(root, "doesWrap", doesWrap);
|
||||||
|
|
||||||
|
|
|
@ -66,18 +66,6 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for IE
|
|
||||||
if (browser.msie)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
document.execCommand("BackgroundImageCache", false, true);
|
|
||||||
}
|
|
||||||
catch (e)
|
|
||||||
{}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//var socket;
|
//var socket;
|
||||||
var channelState = "DISCONNECTED";
|
var channelState = "DISCONNECTED";
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,22 @@ var chat = (function()
|
||||||
isStuck = false;
|
isStuck = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
chatAndUsers: function(fromInitialCall)
|
||||||
|
{
|
||||||
|
if(fromInitialCall || $('#options-chatandusers').prop('checked')){
|
||||||
|
padcookie.setPref("chatAndUsers", true);
|
||||||
|
chat.stickToScreen(true);
|
||||||
|
$('#options-stickychat').prop('checked', true)
|
||||||
|
$('#options-stickychat').prop("disabled", "disabled");
|
||||||
|
$('#users').addClass("chatAndUsers");
|
||||||
|
$("#chatbox").addClass("chatAndUsersChat");
|
||||||
|
}else{
|
||||||
|
padcookie.setPref("chatAndUsers", false);
|
||||||
|
$('#options-stickychat').prop("disabled", false);
|
||||||
|
$('#users').removeClass("chatAndUsers");
|
||||||
|
$("#chatbox").removeClass("chatAndUsersChat");
|
||||||
|
}
|
||||||
|
},
|
||||||
hide: function ()
|
hide: function ()
|
||||||
{
|
{
|
||||||
// decide on hide logic based on chat window being maximized or not
|
// decide on hide logic based on chat window being maximized or not
|
||||||
|
|
|
@ -81,8 +81,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
|
||||||
onServerMessage: function()
|
onServerMessage: function()
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
if (browser.firefox)
|
||||||
if (browser.mozilla)
|
|
||||||
{
|
{
|
||||||
// Prevent "escape" from taking effect and canceling a comet connection;
|
// Prevent "escape" from taking effect and canceling a comet connection;
|
||||||
// doesn't work if focus is on an iframe.
|
// doesn't work if focus is on an iframe.
|
||||||
|
|
|
@ -35,9 +35,10 @@ function sanitizeUnicode(s)
|
||||||
return UNorm.nfc(s);
|
return UNorm.nfc(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeContentCollector(collectStyles, browser, apool, domInterface, className2Author)
|
function makeContentCollector(collectStyles, abrowser, apool, domInterface, className2Author)
|
||||||
{
|
{
|
||||||
browser = browser || {};
|
abrowser = abrowser || {};
|
||||||
|
// I don't like the above.
|
||||||
|
|
||||||
var dom = domInterface || {
|
var dom = domInterface || {
|
||||||
isNodeText: function(n)
|
isNodeText: function(n)
|
||||||
|
@ -484,7 +485,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
||||||
var cls = dom.nodeProp(node, "className");
|
var cls = dom.nodeProp(node, "className");
|
||||||
|
|
||||||
var isPre = (tname == "pre");
|
var isPre = (tname == "pre");
|
||||||
if ((!isPre) && browser.safari)
|
if ((!isPre) && abrowser.safari)
|
||||||
{
|
{
|
||||||
isPre = (styl && /\bwhite-space:\s*pre\b/i.exec(styl));
|
isPre = (styl && /\bwhite-space:\s*pre\b/i.exec(styl));
|
||||||
}
|
}
|
||||||
|
@ -610,7 +611,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!browser.msie)
|
if (!abrowser.msie)
|
||||||
{
|
{
|
||||||
_reachBlockPoint(node, 1, state);
|
_reachBlockPoint(node, 1, state);
|
||||||
}
|
}
|
||||||
|
@ -625,7 +626,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
||||||
_ensureColumnZero(state);
|
_ensureColumnZero(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (browser.msie)
|
if (abrowser.msie)
|
||||||
{
|
{
|
||||||
// in IE, a point immediately after a DIV appears on the next line
|
// in IE, a point immediately after a DIV appears on the next line
|
||||||
_reachBlockPoint(node, 1, state);
|
_reachBlockPoint(node, 1, state);
|
||||||
|
|
|
@ -65,7 +65,6 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
|
||||||
lineMarker: 0
|
lineMarker: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
var browser = (optBrowser || {});
|
|
||||||
var document = optDocument;
|
var document = optDocument;
|
||||||
|
|
||||||
if (document)
|
if (document)
|
||||||
|
@ -93,8 +92,10 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
|
||||||
var perTextNodeProcess = (doesWrap ? _.identity : processSpaces);
|
var perTextNodeProcess = (doesWrap ? _.identity : processSpaces);
|
||||||
var perHtmlLineProcess = (doesWrap ? processSpaces : _.identity);
|
var perHtmlLineProcess = (doesWrap ? processSpaces : _.identity);
|
||||||
var lineClass = 'ace-line';
|
var lineClass = 'ace-line';
|
||||||
|
|
||||||
result.appendSpan = function(txt, cls)
|
result.appendSpan = function(txt, cls)
|
||||||
{
|
{
|
||||||
|
|
||||||
var processedMarker = false;
|
var processedMarker = false;
|
||||||
// Handle lineAttributeMarker, if present
|
// Handle lineAttributeMarker, if present
|
||||||
if (cls.indexOf(lineAttributeMarker) >= 0)
|
if (cls.indexOf(lineAttributeMarker) >= 0)
|
||||||
|
@ -225,7 +226,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
|
||||||
{
|
{
|
||||||
newHTML += ' ';
|
newHTML += ' ';
|
||||||
}
|
}
|
||||||
else
|
else if (!optBrowser.msie)
|
||||||
{
|
{
|
||||||
newHTML += '<br/>';
|
newHTML += '<br/>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,20 +318,20 @@ linestylefilter.textAndClassFuncSplitter = function(func, splitPointsOpt)
|
||||||
return spanHandler;
|
return spanHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
linestylefilter.getFilterStack = function(lineText, textAndClassFunc, browser)
|
linestylefilter.getFilterStack = function(lineText, textAndClassFunc, abrowser)
|
||||||
{
|
{
|
||||||
var func = linestylefilter.getURLFilter(lineText, textAndClassFunc);
|
var func = linestylefilter.getURLFilter(lineText, textAndClassFunc);
|
||||||
|
|
||||||
var hookFilters = hooks.callAll("aceGetFilterStack", {
|
var hookFilters = hooks.callAll("aceGetFilterStack", {
|
||||||
linestylefilter: linestylefilter,
|
linestylefilter: linestylefilter,
|
||||||
browser: browser
|
browser: abrowser
|
||||||
});
|
});
|
||||||
_.map(hookFilters ,function(hookFilter)
|
_.map(hookFilters ,function(hookFilter)
|
||||||
{
|
{
|
||||||
func = hookFilter(lineText, func);
|
func = hookFilter(lineText, func);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (browser !== undefined && browser.msie)
|
if (abrowser !== undefined && abrowser.msie)
|
||||||
{
|
{
|
||||||
// IE7+ will take an e-mail address like <foo@bar.com> and linkify it to foo@bar.com.
|
// IE7+ will take an e-mail address like <foo@bar.com> and linkify it to foo@bar.com.
|
||||||
// We then normalize it back to text with no angle brackets. It's weird. So always
|
// We then normalize it back to text with no angle brackets. It's weird. So always
|
||||||
|
|
|
@ -120,6 +120,7 @@ var getParameters = [
|
||||||
{ name: "userColor", checkVal: null, callback: function(val) { settings.globalUserColor = decodeURIComponent(val); } },
|
{ name: "userColor", checkVal: null, callback: function(val) { settings.globalUserColor = decodeURIComponent(val); } },
|
||||||
{ name: "rtl", checkVal: "true", callback: function(val) { settings.rtlIsTrue = true } },
|
{ name: "rtl", checkVal: "true", callback: function(val) { settings.rtlIsTrue = true } },
|
||||||
{ name: "alwaysShowChat", checkVal: "true", callback: function(val) { chat.stickToScreen(); } },
|
{ name: "alwaysShowChat", checkVal: "true", callback: function(val) { chat.stickToScreen(); } },
|
||||||
|
{ name: "chatAndUsers", checkVal: "true", callback: function(val) { chat.chatAndUsers(); } },
|
||||||
{ name: "lang", checkVal: null, callback: function(val) { window.html10n.localize([val, 'en']); } }
|
{ name: "lang", checkVal: null, callback: function(val) { window.html10n.localize([val, 'en']); } }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -494,7 +495,7 @@ var pad = {
|
||||||
pad.initTime = +(new Date());
|
pad.initTime = +(new Date());
|
||||||
pad.padOptions = clientVars.initialOptions;
|
pad.padOptions = clientVars.initialOptions;
|
||||||
|
|
||||||
if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0)))
|
if ((!browser.msie) && (!(browser.firefox && browser.version.indexOf("1.8.") == 0)))
|
||||||
{
|
{
|
||||||
document.domain = document.domain; // for comet
|
document.domain = document.domain; // for comet
|
||||||
}
|
}
|
||||||
|
@ -562,6 +563,10 @@ var pad = {
|
||||||
chat.stickToScreen(true); // stick it to the screen
|
chat.stickToScreen(true); // stick it to the screen
|
||||||
$('#options-stickychat').prop("checked", true); // set the checkbox to on
|
$('#options-stickychat').prop("checked", true); // set the checkbox to on
|
||||||
}
|
}
|
||||||
|
if(padcookie.getPref("chatAndUsers")){ // if we have a cookie for always showing chat then show it
|
||||||
|
chat.chatAndUsers(true); // stick it to the screen
|
||||||
|
$('#options-chatandusers').prop("checked", true); // set the checkbox to on
|
||||||
|
}
|
||||||
if(padcookie.getPref("showAuthorshipColors") == false){
|
if(padcookie.getPref("showAuthorshipColors") == false){
|
||||||
pad.changeViewOption('showAuthorColors', false);
|
pad.changeViewOption('showAuthorColors', false);
|
||||||
}
|
}
|
||||||
|
@ -779,6 +784,7 @@ var pad = {
|
||||||
handleIsFullyConnected: function(isConnected, isInitialConnect)
|
handleIsFullyConnected: function(isConnected, isInitialConnect)
|
||||||
{
|
{
|
||||||
pad.determineChatVisibility(isConnected && !isInitialConnect);
|
pad.determineChatVisibility(isConnected && !isInitialConnect);
|
||||||
|
pad.determineChatAndUsersVisibility(isConnected && !isInitialConnect);
|
||||||
pad.determineAuthorshipColorsVisibility();
|
pad.determineAuthorshipColorsVisibility();
|
||||||
},
|
},
|
||||||
determineChatVisibility: function(asNowConnectedFeedback){
|
determineChatVisibility: function(asNowConnectedFeedback){
|
||||||
|
@ -791,6 +797,16 @@ var pad = {
|
||||||
$('#options-stickychat').prop("checked", false); // set the checkbox for off
|
$('#options-stickychat').prop("checked", false); // set the checkbox for off
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
determineChatAndUsersVisibility: function(asNowConnectedFeedback){
|
||||||
|
var chatAUVisCookie = padcookie.getPref('chatAndUsersVisible');
|
||||||
|
if(chatAUVisCookie){ // if the cookie is set for chat always visible
|
||||||
|
chat.chatAndUsers(true); // stick it to the screen
|
||||||
|
$('#options-chatandusers').prop("checked", true); // set the checkbox to on
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$('#options-chatandusers').prop("checked", false); // set the checkbox for off
|
||||||
|
}
|
||||||
|
},
|
||||||
determineAuthorshipColorsVisibility: function(){
|
determineAuthorshipColorsVisibility: function(){
|
||||||
var authColCookie = padcookie.getPref('showAuthorshipColors');
|
var authColCookie = padcookie.getPref('showAuthorshipColors');
|
||||||
if (authColCookie){
|
if (authColCookie){
|
||||||
|
|
|
@ -18,7 +18,16 @@ var pad;
|
||||||
|
|
||||||
exports.saveNow = function(){
|
exports.saveNow = function(){
|
||||||
pad.collabClient.sendMessage({"type": "SAVE_REVISION"});
|
pad.collabClient.sendMessage({"type": "SAVE_REVISION"});
|
||||||
alert(_("pad.savedrevs.marked"));
|
$.gritter.add({
|
||||||
|
// (string | mandatory) the heading of the notification
|
||||||
|
title: _("pad.savedrevs.marked"),
|
||||||
|
// (string | mandatory) the text inside the notification
|
||||||
|
text: _("pad.savedrevs.timeslider") || "You can view saved revisions in the timeslider",
|
||||||
|
// (bool | optional) if you want it to fade out on its own or just sit there
|
||||||
|
sticky: false,
|
||||||
|
// (int | optional) the time you want it to be alive for before fading out
|
||||||
|
time: '2000'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.init = function(_pad){
|
exports.init = function(_pad){
|
||||||
|
|
|
@ -133,6 +133,10 @@
|
||||||
<input type="checkbox" id="options-stickychat" onClick="chat.stickToScreen();">
|
<input type="checkbox" id="options-stickychat" onClick="chat.stickToScreen();">
|
||||||
<label for="options-stickychat" data-l10n-id="pad.settings.stickychat"></label>
|
<label for="options-stickychat" data-l10n-id="pad.settings.stickychat"></label>
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
<input type="checkbox" id="options-chatandusers" onClick="chat.chatAndUsers();">
|
||||||
|
<label for="options-chatandusers" data-l10n-id="pad.settings.chatandusers"></label>
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<input type="checkbox" id="options-colorscheck">
|
<input type="checkbox" id="options-colorscheck">
|
||||||
<label for="options-colorscheck" data-l10n-id="pad.settings.colorcheck"></label>
|
<label for="options-colorscheck" data-l10n-id="pad.settings.colorcheck"></label>
|
||||||
|
|
|
@ -44,7 +44,7 @@ describe("bold button", function(){
|
||||||
//select this text element
|
//select this text element
|
||||||
$firstTextElement.sendkeys('{selectall}');
|
$firstTextElement.sendkeys('{selectall}');
|
||||||
|
|
||||||
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE
|
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
|
||||||
var evtType = "keypress";
|
var evtType = "keypress";
|
||||||
}else{
|
}else{
|
||||||
var evtType = "keydown";
|
var evtType = "keydown";
|
||||||
|
|
|
@ -297,7 +297,7 @@ function prepareDocument(n, target){ // generates a random document with random
|
||||||
}
|
}
|
||||||
|
|
||||||
function keyEvent(target, charCode, ctrl, shift){ // sends a charCode to the window
|
function keyEvent(target, charCode, ctrl, shift){ // sends a charCode to the window
|
||||||
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE
|
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
|
||||||
var evtType = "keypress";
|
var evtType = "keypress";
|
||||||
}else{
|
}else{
|
||||||
var evtType = "keydown";
|
var evtType = "keydown";
|
||||||
|
|
|
@ -15,7 +15,7 @@ describe("indentation button", function(){
|
||||||
//select this text element
|
//select this text element
|
||||||
$firstTextElement.sendkeys('{selectall}');
|
$firstTextElement.sendkeys('{selectall}');
|
||||||
|
|
||||||
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE
|
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
|
||||||
var evtType = "keypress";
|
var evtType = "keypress";
|
||||||
}else{
|
}else{
|
||||||
var evtType = "keydown";
|
var evtType = "keydown";
|
||||||
|
|
|
@ -44,7 +44,7 @@ describe("italic some text", function(){
|
||||||
//select this text element
|
//select this text element
|
||||||
$firstTextElement.sendkeys('{selectall}');
|
$firstTextElement.sendkeys('{selectall}');
|
||||||
|
|
||||||
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE
|
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
|
||||||
var evtType = "keypress";
|
var evtType = "keypress";
|
||||||
}else{
|
}else{
|
||||||
var evtType = "keydown";
|
var evtType = "keydown";
|
||||||
|
|
|
@ -47,7 +47,7 @@ describe("undo button then redo button", function(){
|
||||||
var modifiedValue = $firstTextElement.text(); // get the modified value
|
var modifiedValue = $firstTextElement.text(); // get the modified value
|
||||||
expect(modifiedValue).not.to.be(originalValue); // expect the value to change
|
expect(modifiedValue).not.to.be(originalValue); // expect the value to change
|
||||||
|
|
||||||
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE
|
if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
|
||||||
var evtType = "keypress";
|
var evtType = "keypress";
|
||||||
}else{
|
}else{
|
||||||
var evtType = "keydown";
|
var evtType = "keydown";
|
||||||
|
|
Loading…
Reference in New Issue