Compare commits

...

10 Commits

Author SHA1 Message Date
John McLear 27d4686ff8 readwrite should be on innerdoc 2015-04-12 19:30:06 +01:00
John McLear 20e899476a make chat go in right place 2015-04-12 19:27:34 +01:00
Peter 'Pita' Martischka 5dc4b315fe Merge branch 'iframes-must-die' of github.com:ether/etherpad-lite into iframes-must-die 2015-04-12 19:24:21 +01:00
Peter 'Pita' Martischka bf352ffcca fixed merge conflicts 2015-04-12 19:24:02 +01:00
John McLear 5f71c899ab proper targeting of css rules 2015-04-12 19:23:06 +01:00
Peter 'Pita' Martischka b2c312e72e replaced some parent 2015-04-12 19:22:00 +01:00
John McLear 06aa9e4db6 fix editbar position, stop popups from closing on open 2015-04-12 19:02:49 +01:00
Peter 'Pita' Martischka ea7f4079fb some more css fixes 2015-04-12 17:29:17 +01:00
Peter 'Pita' Martischka 4f888190ae line numbers have correct height 2015-04-12 17:19:01 +01:00
Peter 'Pita' Martischka 99a6e2ab8f remove editor iframes, first step 2015-04-12 16:37:38 +01:00
10 changed files with 93 additions and 214 deletions

View File

@ -1,8 +1,8 @@
/* These CSS rules are included in both the outer and inner ACE iframe.
Also see inner.css, included only in the inner one.
*/
html { cursor: text; } /* in Safari, produces text cursor for whole doc (inc. below body) */
span { cursor: auto; }
#innerdocbody html { cursor: text; } /* in Safari, produces text cursor for whole doc (inc. below body) */
#innerdocbody span { cursor: auto; }
::selection {
background: #acf;
@ -11,18 +11,18 @@ span { cursor: auto; }
background: #acf;
}
a {
#innerdocbody a {
cursor: pointer !important;
white-space:pre-wrap;
}
ul, ol, li {
#innerdocbody ul, #innerdocbody ol, #innerdocbody li {
padding: 0;
margin: 0;
}
ul { margin-left: 1.5em; }
ul ul { margin-left: 0 !important; }
#innerdocbody ul { margin-left: 1.5em; }
#innerdocbody ul ul { margin-left: 0 !important; }
ul.list-bullet1 { margin-left: 1.5em; }
ul.list-bullet2 { margin-left: 3em; }
ul.list-bullet3 { margin-left: 4.5em; }
@ -80,21 +80,19 @@ ul.list-indent6, ul.list-indent7, ul.list-indent8, ul.list-indent9, ul.list-inde
ul.list-indent11, ul.list-indent12, ul.list-indent13,
ul.list-indent14, ul.list-indent15, ul.list-indent16 { list-style-type: none; }
body {
margin: 0;
white-space: nowrap;
word-wrap: normal;
}
#outerdocbody {
background-color: #fff;
}
body.grayedout { background-color: #eee !important }
#innerdocbody.grayedout { background-color: #eee !important }
#innerdocbody {
font-size: 12px; /* overridden by body.style */
font-family:Arial, sans-serif; /* overridden by body.style */
line-height: 16px; /* overridden by body.style */
margin: 0;
white-space: nowrap;
word-wrap: normal;
}
body.doesWrap {
@ -119,11 +117,8 @@ body.doesWrap > div{
}
#innerdocbody {
padding-top: 1px; /* important for some reason? */
padding-right: 10px;
padding-bottom: 8px;
padding-left: 1px /* prevents characters from looking chopped off in FF3 -- Removed because it added too much whitespace */;
overflow: hidden;
position: absolute;
top: 8px;
/* blank 1x1 gif, so that IE8 doesn't consider the body transparent */
background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==);
}

View File

@ -16,9 +16,6 @@ body,
textarea {
font-family: Helvetica, Arial, sans-serif
}
iframe {
position: absolute
}
.readonly .acl-write {
display: none;
}
@ -57,6 +54,9 @@ a img {
width: 100%;
white-space: nowrap;
height: 32px;
position:fixed;
top:0;
z-index:9;
}
.toolbar ul {
position: absolute;
@ -217,13 +217,6 @@ li[data-key=showusers] > a #online_count {
bottom: 0px;
z-index: 1;
}
#editorcontainer iframe {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
left: 0; /* Required for safari fixes RTL */
}
#editorloadingbox {
padding-top: 100px;
padding-bottom: 100px;
@ -539,7 +532,7 @@ table#otheruserstable {
}
#chatbox {
position: absolute;
position: fixed;
bottom: 0px;
right: 20px;
width: 180px;
@ -554,6 +547,12 @@ table#otheruserstable {
border-top-left-radius: 5px;
border-top-right-radius: 5px;
display: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#chattext {
background-color: white;

View File

@ -200,7 +200,6 @@ function Ace2Editor()
editor.init = function(containerId, initialCode, doneFunc)
{
editor.importText(initialCode);
info.onEditorReady = function()
@ -210,126 +209,10 @@ function Ace2Editor()
doneFunc();
};
(function()
{
var doctype = "<!doctype html>";
var iframeHTML = [];
iframeHTML.push(doctype);
iframeHTML.push("<html><head>");
// calls to these functions ($$INCLUDE_...) are replaced when this file is processed
// and compressed, putting the compressed code from the named file directly into the
// source here.
// these lines must conform to a specific format because they are passed by the build script:
var includedCSS = [];
var $$INCLUDE_CSS = function(filename) {includedCSS.push(filename)};
$$INCLUDE_CSS("../static/css/iframe_editor.css");
$$INCLUDE_CSS("../static/css/pad.css");
$$INCLUDE_CSS("../static/custom/pad.css");
var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path });
includedCSS = includedCSS.concat(additionalCSS);
pushStyleTagsFor(iframeHTML, includedCSS);
if (!Ace2Editor.EMBEDED && Ace2Editor.EMBEDED[KERNEL_SOURCE]) {
// Remotely src'd script tag will not work in IE; it must be embedded, so
// throw an error if it is not.
throw new Error("Require kernel could not be found.");
}
iframeHTML.push(scriptTag(
Ace2Editor.EMBEDED[KERNEL_SOURCE] + '\n\
require.setRootURI("../javascripts/src");\n\
require.setLibraryURI("../javascripts/lib");\n\
require.setGlobalKeyPath("require");\n\
\n\
var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");\n\
var plugins = require("ep_etherpad-lite/static/js/pluginfw/client_plugins");\n\
hooks.plugins = plugins;\n\
plugins.adoptPluginsFromAncestorsOf(window);\n\
\n\
$ = jQuery = require("ep_etherpad-lite/static/js/rjquery").jQuery; // Expose jQuery #HACK\n\
var Ace2Inner = require("ep_etherpad-lite/static/js/ace2_inner");\n\
\n\
plugins.ensure(function () {\n\
Ace2Inner.init();\n\
});\n\
'));
iframeHTML.push('<style type="text/css" title="dynamicsyntax"></style>');
hooks.callAll("aceInitInnerdocbodyHead", {
iframeHTML: iframeHTML
});
iframeHTML.push('</head><body id="innerdocbody" role="application" class="syntax" spellcheck="false">&nbsp;</body></html>');
// Expose myself to global for my child frame.
var thisFunctionsName = "ChildAccessibleAce2Editor";
(function () {return this}())[thisFunctionsName] = Ace2Editor;
var outerScript = '\
editorId = ' + JSON.stringify(info.id) + ';\n\
editorInfo = parent[' + JSON.stringify(thisFunctionsName) + '].registry[editorId];\n\
window.onload = function () {\n\
window.onload = null;\n\
setTimeout(function () {\n\
var iframe = document.createElement("IFRAME");\n\
iframe.name = "ace_inner";\n\
iframe.title = "pad";\n\
iframe.scrolling = "no";\n\
var outerdocbody = document.getElementById("outerdocbody");\n\
iframe.frameBorder = 0;\n\
iframe.allowTransparency = true; // for IE\n\
outerdocbody.insertBefore(iframe, outerdocbody.firstChild);\n\
iframe.ace_outerWin = window;\n\
readyFunc = function () {\n\
editorInfo.onEditorReady();\n\
readyFunc = null;\n\
editorInfo = null;\n\
};\n\
var doc = iframe.contentWindow.document;\n\
doc.open();\n\
var text = (' + JSON.stringify(iframeHTML.join('\n')) + ');\n\
doc.write(text);\n\
doc.close();\n\
}, 0);\n\
}';
var outerHTML = [doctype, '<html><head>']
var includedCSS = [];
var $$INCLUDE_CSS = function(filename) {includedCSS.push(filename)};
$$INCLUDE_CSS("../static/css/iframe_editor.css");
$$INCLUDE_CSS("../static/css/pad.css");
$$INCLUDE_CSS("../static/custom/pad.css");
var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path });
includedCSS = includedCSS.concat(additionalCSS);
pushStyleTagsFor(outerHTML, includedCSS);
// bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly
// (throbs busy while typing)
outerHTML.push('<style type="text/css" title="dynamicsyntax"></style>', '<link rel="stylesheet" type="text/css" href="data:text/css,"/>', scriptTag(outerScript), '</head><body id="outerdocbody"><div id="sidediv"><!-- --></div><div id="linemetricsdiv">x</div></body></html>');
var outerFrame = document.createElement("IFRAME");
outerFrame.name = "ace_outer";
outerFrame.frameBorder = 0; // for IE
outerFrame.title = "Ether";
info.frame = outerFrame;
document.getElementById(containerId).appendChild(outerFrame);
var editorDocument = outerFrame.contentWindow.document;
editorDocument.open();
editorDocument.write(outerHTML.join(''));
editorDocument.close();
})();
var Ace2Inner = require("ep_etherpad-lite/static/js/ace2_inner");
var editorId = info.id;
var editorInfo = Ace2Editor.registry[editorId];
Ace2Inner.init(editorInfo);
};
return editor;

View File

@ -47,7 +47,7 @@ var isNodeText = Ace2Common.isNodeText,
noop = Ace2Common.noop;
var hooks = require('./pluginfw/hooks');
function Ace2Inner(){
function Ace2Inner(editorInfo){
var makeChangesetTracker = require('./changesettracker').makeChangesetTracker;
var colorutils = require('./colorutils').colorutils;
@ -80,13 +80,9 @@ function Ace2Inner(){
var thisAuthor = '';
var disposed = false;
var editorInfo = parent.editorInfo;
var iframe = window.frameElement;
var outerWin = iframe.ace_outerWin;
iframe.ace_outerWin = null; // prevent IE 6 memory leak
var sideDiv = iframe.nextSibling;
var lineMetricsDiv = sideDiv.nextSibling;
var sideDiv = $('#sidediv')[0];
var lineMetricsDiv = $('#linemetricsdiv')[0];
var innerdocbody = $('#innerdocbody')[0];
initLineNumbers();
var outsideKeyDown = noop;
@ -377,7 +373,7 @@ function Ace2Inner(){
if (currentCallStack)
{
console.error("Can't enter callstack " + type + ", already in " + currentCallStack.type);
console.log("Can't enter callstack " + type + ", already in " + currentCallStack.type);
}
var profiling = false;
@ -961,7 +957,7 @@ function Ace2Inner(){
setClassPresence(sideDiv, "sidedivhidden", !hasLineNumbers);
fixView();
},
grayedout: setClassPresenceNamed(outerWin.document.body, "grayedout"),
grayedout: setClassPresenceNamed(window.document.body, "grayedout"),
dmesg: function(){ dmesg = window.dmesg = value; },
userauthor: function(value){
thisAuthor = String(value);
@ -3263,7 +3259,7 @@ function Ace2Inner(){
function getViewPortTopBottom()
{
var theTop = getScrollY();
var doc = outerWin.document;
var doc = window.document;
var height = doc.documentElement.clientHeight;
return {
top: theTop,
@ -3339,10 +3335,6 @@ function Ace2Inner(){
evt.preventDefault();
}
}
//hide the dropdownso
if(window.parent.parent.padeditbar){ // required in case its in an iframe should probably use parent.. See Issue 327 https://github.com/ether/etherpad-lite/issues/327
window.parent.parent.padeditbar.toggleDropDown("none");
}
}
function doReturnKey()
@ -3636,15 +3628,15 @@ function Ace2Inner(){
}else{
var lineHeight = myselection.focusNode.offsetHeight; // line height of blank lines
}
var heightOfChatIcon = parent.parent.$('#chaticon').height(); // height of the chat icon button
var heightOfChatIcon = $('#chaticon').height(); // height of the chat icon button
lineHeight = (lineHeight *2) + heightOfChatIcon;
var viewport = getViewPortTopBottom();
var viewportHeight = viewport.bottom - viewport.top - lineHeight;
var relCaretOffsetTop = caretOffsetTop - viewport.top; // relative Caret Offset Top to viewport
if (viewportHeight < relCaretOffsetTop){
parent.parent.$("#chaticon").css("opacity",".3"); // make chaticon opacity low when user types near it
$("#chaticon").css("opacity",".3"); // make chaticon opacity low when user types near it
}else{
parent.parent.$("#chaticon").css("opacity","1"); // make chaticon opacity back to full (so fully visible)
$("#chaticon").css("opacity","1"); // make chaticon opacity back to full (so fully visible)
}
//dmesg("keyevent type: "+type+", which: "+which);
@ -3695,7 +3687,7 @@ function Ace2Inner(){
// Note that while most editors use Alt F10 this is not desirable
// As ubuntu cannot use Alt F10....
// Focus on the editbar. -- TODO: Move Focus back to previous state (we know it so we can use it)
var firstEditbarElement = parent.parent.$('#editbar').children("ul").first().children().first().children().first().children().first();
var firstEditbarElement = $('#editbar').children("ul").first().children().first().children().first().children().first();
$(this).blur();
firstEditbarElement.focus();
evt.preventDefault();
@ -3703,8 +3695,8 @@ function Ace2Inner(){
if ((!specialHandled) && altKey && keyCode == 67){
// Alt c focuses on the Chat window
$(this).blur();
parent.parent.chat.show();
parent.parent.chat.focus();
window.chat.show();
window.chat.focus();
evt.preventDefault();
}
if ((!specialHandled) && evt.ctrlKey && shiftKey && keyCode == 50 && type === "keydown"){
@ -3743,13 +3735,13 @@ function Ace2Inner(){
}
else{
// Known authors info, both current and historical
var padAuthors = parent.parent.pad.userList();
var padAuthors = window.pad.userList();
var authorObj = {};
authors.forEach(function(authorId){
padAuthors.forEach(function(padAuthor){
// If the person doing the lookup is the author..
if(padAuthor.userId === authorId){
if(parent.parent.clientVars.userId === authorId){
if(window.clientVars.userId === authorId){
authorObj = {
name: "Me"
}
@ -3774,7 +3766,7 @@ function Ace2Inner(){
var authorString = "The authors of this line are " + authorNames.join(" & ");
}
parent.parent.$.gritter.add({
$.gritter.add({
// (string | mandatory) the heading of the notification
title: 'Line Authors',
// (string | mandatory) the text inside the notification
@ -3809,19 +3801,19 @@ function Ace2Inner(){
//scrollSelectionIntoView();
scheduler.setTimeout(function()
{
outerWin.scrollBy(-100, 0);
window.scrollBy(-100, 0);
}, 0);
specialHandled = true;
}
if ((!specialHandled) && isTypeForCmdKey && String.fromCharCode(which).toLowerCase() == "s" && (evt.metaKey || evt.ctrlKey) && !evt.altKey) /* Do a saved revision on ctrl S */
{
evt.preventDefault();
var originalBackground = parent.parent.$('#revisionlink').css("background")
parent.parent.$('#revisionlink').css({"background":"lightyellow"});
var originalBackground = $('#revisionlink').css("background")
$('#revisionlink').css({"background":"lightyellow"});
scheduler.setTimeout(function(){
parent.parent.$('#revisionlink').css({"background":originalBackground});
$('#revisionlink').css({"background":originalBackground});
}, 1000);
parent.parent.pad.collabClient.sendMessage({"type":"SAVE_REVISION"}); /* The parent.parent part of this is BAD and I feel bad.. It may break something */
window.pad.collabClient.sendMessage({"type":"SAVE_REVISION"}); /* The parent.parent part of this is BAD and I feel bad.. It may break something */
specialHandled = true;
}
if ((!specialHandled) && isTypeForSpecialKey && keyCode == 9 && !(evt.metaKey || evt.ctrlKey))
@ -4721,6 +4713,7 @@ function Ace2Inner(){
function fixView()
{
//return; // TODO: look into this later
// calling this method repeatedly should be fast
if (getInnerWidth() === 0 || getInnerHeight() === 0)
{
@ -4740,7 +4733,7 @@ function Ace2Inner(){
if (newSideDivWidth < MIN_LINEDIV_WIDTH) newSideDivWidth = MIN_LINEDIV_WIDTH;
iframePadLeft = EDIT_BODY_PADDING_LEFT;
if (hasLineNumbers) iframePadLeft += newSideDivWidth + LINE_NUMBER_PADDING_RIGHT;
setIfNecessary(iframe.style, "left", iframePadLeft + "px");
setIfNecessary(innerdocbody.style, "left", iframePadLeft + "px");
setIfNecessary(sideDiv.style, "width", newSideDivWidth + "px");
for (var i = 0; i < 2; i++)
@ -4752,11 +4745,11 @@ function Ace2Inner(){
if (newHeight < viewHeight)
{
newHeight = viewHeight;
if (browser.msie) setIfNecessary(outerWin.document.documentElement.style, 'overflowY', 'auto');
if (browser.msie) setIfNecessary(window.document.documentElement.style, 'overflowY', 'auto');
}
else
{
if (browser.msie) setIfNecessary(outerWin.document.documentElement.style, 'overflowY', 'scroll');
if (browser.msie) setIfNecessary(window.document.documentElement.style, 'overflowY', 'scroll');
}
if (doesWrap)
{
@ -4766,8 +4759,8 @@ function Ace2Inner(){
{
if (newWidth < viewWidth) newWidth = viewWidth;
}
setIfNecessary(iframe.style, "height", newHeight + "px");
setIfNecessary(iframe.style, "width", newWidth + "px");
setIfNecessary(innerdocbody.style, "height", newHeight + "px");
setIfNecessary(innerdocbody.style, "width", newWidth + "px");
setIfNecessary(sideDiv.style, "height", newHeight + "px");
}
if (browser.firefox)
@ -4792,7 +4785,7 @@ function Ace2Inner(){
// if near edge, scroll to edge
var scrollX = getScrollX();
var scrollY = getScrollY();
var win = outerWin;
var win = window;
var r = 20;
enforceEditability();
@ -4802,8 +4795,8 @@ function Ace2Inner(){
function getScrollXY()
{
var win = outerWin;
var odoc = outerWin.document;
var win = window;
var odoc = window.document;
if (typeof(win.pageYOffset) == "number")
{
return {
@ -4833,17 +4826,17 @@ function Ace2Inner(){
function setScrollX(x)
{
outerWin.scrollTo(x, getScrollY());
window.scrollTo(x, getScrollY());
}
function setScrollY(y)
{
outerWin.scrollTo(getScrollX(), y);
window.scrollTo(getScrollX(), y);
}
function setScrollXY(x, y)
{
outerWin.scrollTo(x, y);
window.scrollTo(x, y);
}
var _teardownActions = [];
@ -5077,7 +5070,7 @@ function Ace2Inner(){
function getPageHeight()
{
var win = outerWin;
var win = window;
var odoc = win.document;
if (win.innerHeight && win.scrollMaxY) return win.innerHeight + win.scrollMaxY;
else if (odoc.body.scrollHeight > odoc.body.offsetHeight) return odoc.body.scrollHeight;
@ -5086,7 +5079,7 @@ function Ace2Inner(){
function getPageWidth()
{
var win = outerWin;
var win = window;
var odoc = win.document;
if (win.innerWidth && win.scrollMaxX) return win.innerWidth + win.scrollMaxX;
else if (odoc.body.scrollWidth > odoc.body.offsetWidth) return odoc.body.scrollWidth;
@ -5095,7 +5088,7 @@ function Ace2Inner(){
function getInnerHeight()
{
var win = outerWin;
var win = window;
var odoc = win.document;
var h;
if (browser.opera) h = win.innerHeight;
@ -5109,7 +5102,7 @@ function Ace2Inner(){
function getInnerWidth()
{
var win = outerWin;
var win = window;
var odoc = win.document;
return odoc.documentElement.clientWidth;
}
@ -5119,8 +5112,8 @@ function Ace2Inner(){
// requires element (non-text) node;
// if node extends above top of viewport or below bottom of viewport (or top of scrollbar),
// scroll it the minimum distance needed to be completely in view.
var win = outerWin;
var odoc = outerWin.document;
var win = window;
var odoc = window.document;
var distBelowTop = node.offsetTop + iframePadTop - win.scrollY;
var distAboveBottom = win.scrollY + getInnerHeight() - (node.offsetTop + iframePadTop + node.offsetHeight);
@ -5136,8 +5129,8 @@ function Ace2Inner(){
function scrollXHorizontallyIntoView(pixelX)
{
var win = outerWin;
var odoc = outerWin.document;
var win = window;
var odoc = window.document;
pixelX += iframePadLeft;
var distInsideLeft = pixelX - win.scrollX;
var distInsideRight = win.scrollX + getInnerWidth() - pixelX;
@ -5331,7 +5324,7 @@ function Ace2Inner(){
{
lineNumbersShown = 1;
sideDiv.innerHTML = '<table border="0" cellpadding="0" cellspacing="0" align="right"><tr><td id="sidedivinner"><div>1</div></td></tr></table>';
sideDivInner = outerWin.document.getElementById("sidedivinner");
sideDivInner = window.document.getElementById("sidedivinner");
}
function updateLineNumbers()
@ -5341,7 +5334,7 @@ function Ace2Inner(){
//update height of all current line numbers
var a = sideDivInner.firstChild;
var b = doc.body.firstChild;
var b = innerdocbody.firstChild;
var n = 0;
if (currentCallStack && currentCallStack.domClean)
@ -5377,8 +5370,9 @@ function Ace2Inner(){
if (newNumLines != lineNumbersShown)
{
var container = sideDivInner;
var odoc = outerWin.document;
var odoc = window.document;
var fragment = odoc.createDocumentFragment();
while (lineNumbersShown < newNumLines)
{
lineNumbersShown++;
@ -5457,7 +5451,7 @@ function Ace2Inner(){
scheduler.setTimeout(function()
{
parent.readyFunc(); // defined in code that sets up the inner iframe
editorInfo.onEditorReady(); // defined in code that sets up the inner iframe
}, 0);
isSetUp = true;
@ -5466,7 +5460,7 @@ function Ace2Inner(){
}
exports.init = function () {
var editor = new Ace2Inner()
exports.init = function (editorInfo) {
var editor = new Ace2Inner(editorInfo)
editor.init();
};

View File

@ -173,7 +173,7 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider)
}
// Get my authorID
var authorId = parent.parent.pad.myUserInfo.userId;
var authorId = window.pad.myUserInfo.userId;
// Sanitize authorship
// We need to replace all author attribs with thisSession.author, in case they copy/pasted or otherwise inserted other peoples changes

View File

@ -229,8 +229,8 @@ var chat = (function()
if (evt.altKey && evt.which == 67){
// Alt c focuses on the Chat window
$(this).blur();
parent.parent.chat.show();
parent.parent.chat.focus();
window.chat.show();
window.chat.focus();
evt.preventDefault();
}
});

View File

@ -279,7 +279,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
if (newRev != (oldRev + 1))
{
parent.parent.console.warn("bad message revision on NEW_CHANGES: " + newRev + " not " + (oldRev + 1));
console.warn("bad message revision on NEW_CHANGES: " + newRev + " not " + (oldRev + 1));
// setChannelState("DISCONNECTED", "badmessage_newchanges");
return;
}
@ -289,7 +289,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
if (newRev != (rev + 1))
{
parent.parent.console.warn("bad message revision on NEW_CHANGES: " + newRev + " not " + (rev + 1));
console.warn("bad message revision on NEW_CHANGES: " + newRev + " not " + (rev + 1));
// setChannelState("DISCONNECTED", "badmessage_newchanges");
return;
}
@ -303,7 +303,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
{
if (newRev != (msgQueue[msgQueue.length - 1].newRev + 1))
{
parent.parent.console.warn("bad message revision on ACCEPT_COMMIT: " + newRev + " not " + (msgQueue[msgQueue.length - 1][0] + 1));
console.warn("bad message revision on ACCEPT_COMMIT: " + newRev + " not " + (msgQueue[msgQueue.length - 1][0] + 1));
// setChannelState("DISCONNECTED", "badmessage_acceptcommit");
return;
}
@ -313,7 +313,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
if (newRev != (rev + 1))
{
parent.parent.console.warn("bad message revision on ACCEPT_COMMIT: " + newRev + " not " + (rev + 1));
console.warn("bad message revision on ACCEPT_COMMIT: " + newRev + " not " + (rev + 1));
// setChannelState("DISCONNECTED", "badmessage_acceptcommit");
return;
}

View File

@ -322,7 +322,7 @@ function handshake()
pad._afterHandshake();
initalized = true;
$("body").addClass(clientVars.readonly ? "readonly" : "readwrite")
$("#innerdocbody").addClass(clientVars.readonly ? "readonly" : "readwrite")
padeditor.ace.callWithAce(function (ace) {
ace.ace_setEditable(!clientVars.readonly);

View File

@ -332,7 +332,7 @@ var padeditbar = (function()
}
}else{
// Focus on the editbar :)
var firstEditbarElement = parent.parent.$('#editbar').children("ul").first().children().first().children().first().children().first();
var firstEditbarElement = $('#editbar').children("ul").first().children().first().children().first().children().first();
$(this).blur();
firstEditbarElement.focus();
evt.preventDefault();

View File

@ -41,6 +41,8 @@
<% e.begin_block("styles"); %>
<link href="../static/css/pad.css" rel="stylesheet">
<link href="../static/css/iframe_editor.css" rel="stylesheet">
<link href="../static/custom/pad.css" rel="stylesheet">
<% e.begin_block("customStyles"); %>
<link href="../static/custom/pad.css" rel="stylesheet">
@ -100,7 +102,13 @@
</div>
<div id="editorcontainerbox">
<div id="editorcontainer"></div>
<div id="editorcontainer">
<div id="outerdocbody">
<div id="sidediv"><!-- --></div>
<div id="linemetricsdiv">x</div>
</div>
<div id="innerdocbody" role="application" class="syntax" spellcheck="false">&nbsp;</div>
</div>
<div id="editorloadingbox">
<div id="passwordRequired">
<p data-l10n-id="pad.passwordRequired">You need a password to access this pad</p>