mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-05-11 17:51:34 -04:00
remove trailing whitespace
This commit is contained in:
parent
e1edc8079f
commit
0b6709392b
104 changed files with 1479 additions and 1479 deletions
|
@ -4,23 +4,23 @@ var _ = require('./underscore');
|
|||
|
||||
var lineMarkerAttribute = 'lmkr';
|
||||
|
||||
// If one of these attributes are set to the first character of a
|
||||
// If one of these attributes are set to the first character of a
|
||||
// line it is considered as a line attribute marker i.e. attributes
|
||||
// set on this marker are applied to the whole line.
|
||||
// set on this marker are applied to the whole line.
|
||||
// The list attribute is only maintained for compatibility reasons
|
||||
var lineAttributes = [lineMarkerAttribute,'list'];
|
||||
|
||||
/*
|
||||
The Attribute manager builds changesets based on a document
|
||||
The Attribute manager builds changesets based on a document
|
||||
representation for setting and removing range or line-based attributes.
|
||||
|
||||
|
||||
@param rep the document representation to be used
|
||||
@param applyChangesetCallback this callback will be called
|
||||
@param applyChangesetCallback this callback will be called
|
||||
once a changeset has been built.
|
||||
|
||||
|
||||
A document representation contains
|
||||
- an array `alines` containing 1 attributes string for each line
|
||||
|
||||
|
||||
A document representation contains
|
||||
- an array `alines` containing 1 attributes string for each line
|
||||
- an Attribute pool `apool`
|
||||
- a SkipList `lines` containing the text lines of the document.
|
||||
*/
|
||||
|
@ -30,7 +30,7 @@ var AttributeManager = function(rep, applyChangesetCallback)
|
|||
this.rep = rep;
|
||||
this.applyChangesetCallback = applyChangesetCallback;
|
||||
this.author = '';
|
||||
|
||||
|
||||
// If the first char in a line has one of the following attributes
|
||||
// it will be considered as a line marker
|
||||
};
|
||||
|
@ -38,19 +38,19 @@ var AttributeManager = function(rep, applyChangesetCallback)
|
|||
AttributeManager.lineAttributes = lineAttributes;
|
||||
|
||||
AttributeManager.prototype = _(AttributeManager.prototype).extend({
|
||||
|
||||
|
||||
applyChangeset: function(changeset){
|
||||
if(!this.applyChangesetCallback) return changeset;
|
||||
|
||||
|
||||
var cs = changeset.toString();
|
||||
if (!Changeset.isIdentity(cs))
|
||||
{
|
||||
this.applyChangesetCallback(cs);
|
||||
}
|
||||
|
||||
|
||||
return changeset;
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
Sets attributes on a range
|
||||
@param start [row, col] tuple pointing to the start of the range
|
||||
|
@ -65,22 +65,22 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
|
|||
return this.applyChangeset(builder);
|
||||
},
|
||||
|
||||
/*
|
||||
/*
|
||||
Returns if the line already has a line marker
|
||||
@param lineNum: the number of the line
|
||||
*/
|
||||
lineHasMarker: function(lineNum){
|
||||
var that = this;
|
||||
|
||||
|
||||
return _.find(lineAttributes, function(attribute){
|
||||
return that.getAttributeOnLine(lineNum, attribute) != '';
|
||||
return that.getAttributeOnLine(lineNum, attribute) != '';
|
||||
}) !== undefined;
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
Gets a specified attribute on a line
|
||||
@param lineNum: the number of the line to set the attribute for
|
||||
@param attributeKey: the name of the attribute to get, e.g. list
|
||||
@param attributeKey: the name of the attribute to get, e.g. list
|
||||
*/
|
||||
getAttributeOnLine: function(lineNum, attributeName){
|
||||
// get `attributeName` attribute of first char of line
|
||||
|
@ -95,26 +95,26 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
|
|||
}
|
||||
return '';
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
Sets a specified attribute on a line
|
||||
@param lineNum: the number of the line to set the attribute for
|
||||
@param attributeKey: the name of the attribute to set, e.g. list
|
||||
@param attributeValue: an optional parameter to pass to the attribute (e.g. indention level)
|
||||
|
||||
|
||||
*/
|
||||
setAttributeOnLine: function(lineNum, attributeName, attributeValue){
|
||||
var loc = [0,0];
|
||||
var builder = Changeset.builder(this.rep.lines.totalWidth());
|
||||
var hasMarker = this.lineHasMarker(lineNum);
|
||||
|
||||
|
||||
ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0]));
|
||||
|
||||
if(hasMarker){
|
||||
ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 1]), [
|
||||
[attributeName, attributeValue]
|
||||
], this.rep.apool);
|
||||
}else{
|
||||
}else{
|
||||
// add a line marker
|
||||
builder.insert('*', [
|
||||
['author', this.author],
|
||||
|
@ -123,10 +123,10 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
|
|||
[attributeName, attributeValue]
|
||||
], this.rep.apool);
|
||||
}
|
||||
|
||||
|
||||
return this.applyChangeset(builder);
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
Removes a specified attribute on a line
|
||||
@param lineNum: the number of the affected line
|
||||
|
@ -134,19 +134,19 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
|
|||
|
||||
*/
|
||||
removeAttributeOnLine: function(lineNum, attributeName, attributeValue){
|
||||
|
||||
|
||||
var loc = [0,0];
|
||||
var builder = Changeset.builder(this.rep.lines.totalWidth());
|
||||
var hasMarker = this.lineHasMarker(lineNum);
|
||||
|
||||
|
||||
if(hasMarker){
|
||||
ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0]));
|
||||
ChangesetUtils.buildRemoveRange(this.rep, builder, loc, (loc = [lineNum, 1]));
|
||||
}
|
||||
|
||||
|
||||
return this.applyChangeset(builder);
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
Sets a specified attribute on a line
|
||||
@param lineNum: the number of the line to set the attribute for
|
||||
|
@ -157,7 +157,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
|
|||
return this.getAttributeOnLine(attributeName) ?
|
||||
this.removeAttributeOnLine(lineNum, attributeName) :
|
||||
this.setAttributeOnLine(lineNum, attributeName, attributeValue);
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -91,6 +91,6 @@ AttributePool.prototype.fromJsonable = function (obj) {
|
|||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
|
||||
module.exports = AttributePool;
|
|
@ -42,7 +42,7 @@ exports.error = function error(msg) {
|
|||
};
|
||||
|
||||
/**
|
||||
* This method is user for assertions with Messages
|
||||
* This method is user for assertions with Messages
|
||||
* if assert fails, the error function called.
|
||||
* @param b {boolean} assertion condition
|
||||
* @param msgParts {string} error to be passed if it fails
|
||||
|
@ -76,7 +76,7 @@ exports.numToString = function (num) {
|
|||
* Converts stuff before $ to base 10
|
||||
* @obsolete not really used anywhere??
|
||||
* @param cs {string} the string
|
||||
* @return integer
|
||||
* @return integer
|
||||
*/
|
||||
exports.toBaseTen = function (cs) {
|
||||
var dollarIndex = cs.indexOf('$');
|
||||
|
@ -93,10 +93,10 @@ exports.toBaseTen = function (cs) {
|
|||
*/
|
||||
|
||||
/**
|
||||
* returns the required length of the text before changeset
|
||||
* returns the required length of the text before changeset
|
||||
* can be applied
|
||||
* @param cs {string} String representation of the Changeset
|
||||
*/
|
||||
*/
|
||||
exports.oldLen = function (cs) {
|
||||
return exports.unpack(cs).oldLen;
|
||||
};
|
||||
|
@ -104,16 +104,16 @@ exports.oldLen = function (cs) {
|
|||
/**
|
||||
* returns the length of the text after changeset is applied
|
||||
* @param cs {string} String representation of the Changeset
|
||||
*/
|
||||
*/
|
||||
exports.newLen = function (cs) {
|
||||
return exports.unpack(cs).newLen;
|
||||
};
|
||||
|
||||
/**
|
||||
* this function creates an iterator which decodes string changeset operations
|
||||
* @param opsStr {string} String encoding of the change operations to be performed
|
||||
* @param optStartIndex {int} from where in the string should the iterator start
|
||||
* @return {Op} type object iterator
|
||||
* @param opsStr {string} String encoding of the change operations to be performed
|
||||
* @param optStartIndex {int} from where in the string should the iterator start
|
||||
* @return {Op} type object iterator
|
||||
*/
|
||||
exports.opIterator = function (opsStr, optStartIndex) {
|
||||
//print(opsStr);
|
||||
|
@ -131,7 +131,7 @@ exports.opIterator = function (opsStr, optStartIndex) {
|
|||
if (result[0] == '?') {
|
||||
exports.error("Hit error opcode in op stream");
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
var regexResult = nextRegexMatch();
|
||||
|
@ -504,7 +504,7 @@ exports.opAssembler = function () {
|
|||
/**
|
||||
* A custom made String Iterator
|
||||
* @param str {string} String to be iterated over
|
||||
*/
|
||||
*/
|
||||
exports.stringIterator = function (str) {
|
||||
var curIndex = 0;
|
||||
|
||||
|
@ -542,7 +542,7 @@ exports.stringIterator = function (str) {
|
|||
};
|
||||
|
||||
/**
|
||||
* A custom made StringBuffer
|
||||
* A custom made StringBuffer
|
||||
*/
|
||||
exports.stringAssembler = function () {
|
||||
var pieces = [];
|
||||
|
@ -820,12 +820,12 @@ exports.textLinesMutator = function (lines) {
|
|||
};
|
||||
|
||||
/**
|
||||
* Function allowing iterating over two Op strings.
|
||||
* Function allowing iterating over two Op strings.
|
||||
* @params in1 {string} first Op string
|
||||
* @params idx1 {int} integer where 1st iterator should start
|
||||
* @params in2 {string} second Op string
|
||||
* @params idx2 {int} integer where 2nd iterator should start
|
||||
* @params func {function} which decides how 1st or 2nd iterator
|
||||
* @params func {function} which decides how 1st or 2nd iterator
|
||||
* advances. When opX.opcode = 0, iterator X advances to
|
||||
* next element
|
||||
* func has signature f(op1, op2, opOut)
|
||||
|
@ -882,7 +882,7 @@ exports.unpack = function (cs) {
|
|||
};
|
||||
|
||||
/**
|
||||
* Packs Changeset object into a string
|
||||
* Packs Changeset object into a string
|
||||
* @params oldLen {int} Old length of the Changeset
|
||||
* @params newLen {int] New length of the Changeset
|
||||
* @params opsStr {string} String encoding of the changes to be made
|
||||
|
@ -958,8 +958,8 @@ exports.mutateTextLines = function (cs, lines) {
|
|||
* Composes two attribute strings (see below) into one.
|
||||
* @param att1 {string} first attribute string
|
||||
* @param att2 {string} second attribue string
|
||||
* @param resultIsMutaton {boolean}
|
||||
* @param pool {AttribPool} attribute pool
|
||||
* @param resultIsMutaton {boolean}
|
||||
* @param pool {AttribPool} attribute pool
|
||||
*/
|
||||
exports.composeAttributes = function (att1, att2, resultIsMutation, pool) {
|
||||
// att1 and att2 are strings like "*3*f*1c", asMutation is a boolean.
|
||||
|
@ -1019,8 +1019,8 @@ exports.composeAttributes = function (att1, att2, resultIsMutation, pool) {
|
|||
};
|
||||
|
||||
/**
|
||||
* Function used as parameter for applyZip to apply a Changeset to an
|
||||
* attribute
|
||||
* Function used as parameter for applyZip to apply a Changeset to an
|
||||
* attribute
|
||||
*/
|
||||
exports._slicerZipperFunc = function (attOp, csOp, opOut, pool) {
|
||||
// attOp is the op from the sequence that is being operated on, either an
|
||||
|
@ -1337,7 +1337,7 @@ exports.compose = function (cs1, cs2, pool) {
|
|||
* returns a function that tests if a string of attributes
|
||||
* (e.g. *3*4) contains a given attribute key,value that
|
||||
* is already present in the pool.
|
||||
* @param attribPair array [key,value] of the attribute
|
||||
* @param attribPair array [key,value] of the attribute
|
||||
* @param pool {AttribPool} Attribute pool
|
||||
*/
|
||||
exports.attributeTester = function (attribPair, pool) {
|
||||
|
@ -1369,9 +1369,9 @@ exports.identity = function (N) {
|
|||
|
||||
|
||||
/**
|
||||
* creates a Changeset which works on oldFullText and removes text
|
||||
* from spliceStart to spliceStart+numRemoved and inserts newText
|
||||
* instead. Also gives possibility to add attributes optNewTextAPairs
|
||||
* creates a Changeset which works on oldFullText and removes text
|
||||
* from spliceStart to spliceStart+numRemoved and inserts newText
|
||||
* instead. Also gives possibility to add attributes optNewTextAPairs
|
||||
* for the new text.
|
||||
* @param oldFullText {string} old text
|
||||
* @param spliecStart {int} where splicing starts
|
||||
|
@ -1407,7 +1407,7 @@ exports.makeSplice = function (oldFullText, spliceStart, numRemoved, newText, op
|
|||
* @param cs Changeset
|
||||
*/
|
||||
exports.toSplices = function (cs) {
|
||||
//
|
||||
//
|
||||
var unpacked = exports.unpack(cs);
|
||||
var splices = [];
|
||||
|
||||
|
@ -1438,7 +1438,7 @@ exports.toSplices = function (cs) {
|
|||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
exports.characterRangeFollow = function (cs, startChar, endChar, insertionsAfter) {
|
||||
var newStartChar = startChar;
|
||||
|
@ -1524,7 +1524,7 @@ exports.makeAttribution = function (text) {
|
|||
* and runs function func on them
|
||||
* @param cs {Changeset} changeset
|
||||
* @param func {function} function to be called
|
||||
*/
|
||||
*/
|
||||
exports.eachAttribNumber = function (cs, func) {
|
||||
var dollarPos = cs.indexOf('$');
|
||||
if (dollarPos < 0) {
|
||||
|
@ -1543,16 +1543,16 @@ exports.eachAttribNumber = function (cs, func) {
|
|||
* callable on a exports, attribution string, or attribs property of an op,
|
||||
* though it may easily create adjacent ops that can be merged.
|
||||
* @param cs {Changeset} changeset to be filtered
|
||||
* @param filter {function} fnc which returns true if an
|
||||
* @param filter {function} fnc which returns true if an
|
||||
* attribute X (int) should be kept in the Changeset
|
||||
*/
|
||||
*/
|
||||
exports.filterAttribNumbers = function (cs, filter) {
|
||||
return exports.mapAttribNumbers(cs, filter);
|
||||
};
|
||||
|
||||
/**
|
||||
* does exactly the same as exports.filterAttribNumbers
|
||||
*/
|
||||
* does exactly the same as exports.filterAttribNumbers
|
||||
*/
|
||||
exports.mapAttribNumbers = function (cs, func) {
|
||||
var dollarPos = cs.indexOf('$');
|
||||
if (dollarPos < 0) {
|
||||
|
@ -1577,7 +1577,7 @@ exports.mapAttribNumbers = function (cs, func) {
|
|||
/**
|
||||
* Create a Changeset going from Identity to a certain state
|
||||
* @params text {string} text of the final change
|
||||
* @attribs attribs {string} optional, operations which insert
|
||||
* @attribs attribs {string} optional, operations which insert
|
||||
* the text and also puts the right attributes
|
||||
*/
|
||||
exports.makeAText = function (text, attribs) {
|
||||
|
@ -1588,9 +1588,9 @@ exports.makeAText = function (text, attribs) {
|
|||
};
|
||||
|
||||
/**
|
||||
* Apply a Changeset to a AText
|
||||
* Apply a Changeset to a AText
|
||||
* @param cs {Changeset} Changeset to be applied
|
||||
* @param atext {AText}
|
||||
* @param atext {AText}
|
||||
* @param pool {AttribPool} Attribute Pool to add to
|
||||
*/
|
||||
exports.applyToAText = function (cs, atext, pool) {
|
||||
|
@ -1602,7 +1602,7 @@ exports.applyToAText = function (cs, atext, pool) {
|
|||
|
||||
/**
|
||||
* Clones a AText structure
|
||||
* @param atext {AText}
|
||||
* @param atext {AText}
|
||||
*/
|
||||
exports.cloneAText = function (atext) {
|
||||
return {
|
||||
|
@ -1613,7 +1613,7 @@ exports.cloneAText = function (atext) {
|
|||
|
||||
/**
|
||||
* Copies a AText structure from atext1 to atext2
|
||||
* @param atext {AText}
|
||||
* @param atext {AText}
|
||||
*/
|
||||
exports.copyAText = function (atext1, atext2) {
|
||||
atext2.text = atext1.text;
|
||||
|
@ -1622,7 +1622,7 @@ exports.copyAText = function (atext1, atext2) {
|
|||
|
||||
/**
|
||||
* Append the set of operations from atext to an assembler
|
||||
* @param atext {AText}
|
||||
* @param atext {AText}
|
||||
* @param assem Assembler like smartOpAssembler
|
||||
*/
|
||||
exports.appendATextToAssembler = function (atext, assem) {
|
||||
|
@ -1660,7 +1660,7 @@ exports.appendATextToAssembler = function (atext, assem) {
|
|||
|
||||
/**
|
||||
* Creates a clone of a Changeset and it's APool
|
||||
* @param cs {Changeset}
|
||||
* @param cs {Changeset}
|
||||
* @param pool {AtributePool}
|
||||
*/
|
||||
exports.prepareForWire = function (cs, pool) {
|
||||
|
@ -1681,8 +1681,8 @@ exports.isIdentity = function (cs) {
|
|||
};
|
||||
|
||||
/**
|
||||
* returns all the values of attributes with a certain key
|
||||
* in an Op attribs string
|
||||
* returns all the values of attributes with a certain key
|
||||
* in an Op attribs string
|
||||
* @param attribs {string} Attribute string of a Op
|
||||
* @param key {string} string to be seached for
|
||||
* @param pool {AttribPool} attribute pool
|
||||
|
@ -1692,8 +1692,8 @@ exports.opAttributeValue = function (op, key, pool) {
|
|||
};
|
||||
|
||||
/**
|
||||
* returns all the values of attributes with a certain key
|
||||
* in an attribs string
|
||||
* returns all the values of attributes with a certain key
|
||||
* in an attribs string
|
||||
* @param attribs {string} Attribute string
|
||||
* @param key {string} string to be seached for
|
||||
* @param pool {AttribPool} attribute pool
|
||||
|
@ -1711,7 +1711,7 @@ exports.attribsAttributeValue = function (attribs, key, pool) {
|
|||
};
|
||||
|
||||
/**
|
||||
* Creates a Changeset builder for a string with initial
|
||||
* Creates a Changeset builder for a string with initial
|
||||
* length oldLen. Allows to add/remove parts of it
|
||||
* @param oldLen {int} Old length
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -86,7 +86,7 @@ function Ace2Editor()
|
|||
});
|
||||
actionsPendingInit = [];
|
||||
}
|
||||
|
||||
|
||||
ace2.registry[info.id] = info;
|
||||
|
||||
// The following functions (prefixed by 'ace_') are exposed by editor, but
|
||||
|
@ -97,7 +97,7 @@ function Ace2Editor()
|
|||
'applyChangesToBase', 'applyPreparedChangesetToBase',
|
||||
'setUserChangeNotificationCallback', 'setAuthorInfo',
|
||||
'setAuthorSelectionRange', 'callWithAce', 'execCommand', 'replaceRange'];
|
||||
|
||||
|
||||
_.each(aceFunctionsPendingInit, function(fnName,i){
|
||||
var prefix = 'ace_';
|
||||
var name = prefix + fnName;
|
||||
|
@ -105,18 +105,18 @@ function Ace2Editor()
|
|||
info[prefix + fnName].apply(this, arguments);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
editor.exportText = function()
|
||||
{
|
||||
if (!loaded) return "(awaiting init)\n";
|
||||
return info.ace_exportText();
|
||||
};
|
||||
|
||||
|
||||
editor.getFrame = function()
|
||||
{
|
||||
return info.frame || null;
|
||||
};
|
||||
|
||||
|
||||
editor.getDebugProperty = function(prop)
|
||||
{
|
||||
return info.ace_getDebugProperty(prop);
|
||||
|
@ -221,16 +221,16 @@ function Ace2Editor()
|
|||
// 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:
|
||||
// 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]) {
|
||||
|
@ -304,11 +304,11 @@ window.onload = function () {\n\
|
|||
$$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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -36,10 +36,10 @@ var isNodeText = Ace2Common.isNodeText,
|
|||
htmlPrettyEscape = Ace2Common.htmlPrettyEscape,
|
||||
noop = Ace2Common.noop;
|
||||
var hooks = require('./pluginfw/hooks');
|
||||
|
||||
|
||||
|
||||
function Ace2Inner(){
|
||||
|
||||
|
||||
var makeChangesetTracker = require('./changesettracker').makeChangesetTracker;
|
||||
var colorutils = require('./colorutils').colorutils;
|
||||
var makeContentCollector = require('./contentcollector').makeContentCollector;
|
||||
|
@ -53,9 +53,9 @@ function Ace2Inner(){
|
|||
var undoModule = require('./undomodule').undoModule;
|
||||
var makeVirtualLineView = require('./virtual_lines').makeVirtualLineView;
|
||||
var AttributeManager = require('./AttributeManager');
|
||||
|
||||
|
||||
var DEBUG = false; //$$ build script replaces the string "var DEBUG=true;//$$" with "var DEBUG=false;"
|
||||
// changed to false
|
||||
// changed to false
|
||||
var isSetUp = false;
|
||||
|
||||
var THE_TAB = ' '; //4
|
||||
|
@ -83,9 +83,9 @@ function Ace2Inner(){
|
|||
initLineNumbers();
|
||||
|
||||
var outsideKeyDown = noop;
|
||||
|
||||
|
||||
var outsideKeyPress = function(){return true;};
|
||||
|
||||
|
||||
var outsideNotifyDirty = noop;
|
||||
|
||||
// selFocusAtStart -- determines whether the selection extends "backwards", so that the focus
|
||||
|
@ -101,7 +101,7 @@ function Ace2Inner(){
|
|||
alines: [],
|
||||
apool: new AttribPool()
|
||||
};
|
||||
|
||||
|
||||
// lines, alltext, alines, and DOM are set up in setup()
|
||||
if (undoModule.enabled)
|
||||
{
|
||||
|
@ -113,7 +113,7 @@ function Ace2Inner(){
|
|||
var doesWrap = true;
|
||||
var hasLineNumbers = true;
|
||||
var isStyled = true;
|
||||
|
||||
|
||||
// space around the innermost iframe element
|
||||
var iframePadLeft = MIN_LINEDIV_WIDTH + LINE_NUMBER_PADDING_RIGHT + EDIT_BODY_PADDING_LEFT;
|
||||
var iframePadTop = EDIT_BODY_PADDING_TOP;
|
||||
|
@ -122,7 +122,7 @@ function Ace2Inner(){
|
|||
|
||||
var console = (DEBUG && window.console);
|
||||
var documentAttributeManager;
|
||||
|
||||
|
||||
if (!window.console)
|
||||
{
|
||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
|
||||
|
@ -158,7 +158,7 @@ function Ace2Inner(){
|
|||
|
||||
var textFace = 'monospace';
|
||||
var textSize = 12;
|
||||
|
||||
|
||||
|
||||
function textLineHeight()
|
||||
{
|
||||
|
@ -231,15 +231,15 @@ function Ace2Inner(){
|
|||
{
|
||||
bgcolor = fadeColor(bgcolor, info.fade);
|
||||
}
|
||||
|
||||
|
||||
var authorStyle = dynamicCSS.selectorStyle(getAuthorColorClassSelector(
|
||||
getAuthorClassName(author)));
|
||||
var anchorStyle = dynamicCSS.selectorStyle(getAuthorColorClassSelector(
|
||||
getAuthorClassName(author))+' > a')
|
||||
|
||||
|
||||
// author color
|
||||
authorStyle.backgroundColor = bgcolor;
|
||||
|
||||
|
||||
// text contrast
|
||||
if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5)
|
||||
{
|
||||
|
@ -247,7 +247,7 @@ function Ace2Inner(){
|
|||
}else{
|
||||
authorStyle.color = null;
|
||||
}
|
||||
|
||||
|
||||
// anchor text contrast
|
||||
if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55)
|
||||
{
|
||||
|
@ -540,8 +540,8 @@ function Ace2Inner(){
|
|||
{
|
||||
return rep.lines.atOffset(charOffset).key;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function dispose()
|
||||
{
|
||||
disposed = true;
|
||||
|
@ -896,14 +896,14 @@ function Ace2Inner(){
|
|||
editorInfo.ace_doReturnKey = doReturnKey;
|
||||
editorInfo.ace_isBlockElement = isBlockElement;
|
||||
editorInfo.ace_getLineListType = getLineListType;
|
||||
|
||||
|
||||
editorInfo.ace_callWithAce = function(fn, callStack, normalize)
|
||||
{
|
||||
var wrapper = function()
|
||||
{
|
||||
return fn(editorInfo);
|
||||
};
|
||||
|
||||
|
||||
if (normalize !== undefined)
|
||||
{
|
||||
var wrapper1 = wrapper;
|
||||
|
@ -929,14 +929,14 @@ function Ace2Inner(){
|
|||
// @param value the value to set to
|
||||
editorInfo.ace_setProperty = function(key, value)
|
||||
{
|
||||
|
||||
// Convinience function returning a setter for a class on an element
|
||||
|
||||
// Convinience function returning a setter for a class on an element
|
||||
var setClassPresenceNamed = function(element, cls){
|
||||
return function(value){
|
||||
setClassPresence(element, cls, !! value)
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// These properties are exposed
|
||||
var setters = {
|
||||
wraps: setWraps,
|
||||
|
@ -951,7 +951,7 @@ function Ace2Inner(){
|
|||
},
|
||||
grayedout: setClassPresenceNamed(outerWin.document.body, "grayedout"),
|
||||
dmesg: function(){ dmesg = window.dmesg = value; },
|
||||
userauthor: function(value){
|
||||
userauthor: function(value){
|
||||
thisAuthor = String(value);
|
||||
documentAttributeManager.author = thisAuthor;
|
||||
},
|
||||
|
@ -960,10 +960,10 @@ function Ace2Inner(){
|
|||
textsize: setTextSize,
|
||||
rtlistrue: setClassPresenceNamed(root, "rtl")
|
||||
};
|
||||
|
||||
|
||||
var setter = setters[key.toLowerCase()];
|
||||
|
||||
// check if setter is present
|
||||
|
||||
// check if setter is present
|
||||
if(setter !== undefined){
|
||||
setter(value)
|
||||
}
|
||||
|
@ -1067,7 +1067,7 @@ function Ace2Inner(){
|
|||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
isTimeUp.elapsed = function()
|
||||
{
|
||||
return now() - startTime;
|
||||
|
@ -1448,7 +1448,7 @@ function Ace2Inner(){
|
|||
var p = PROFILER("getSelection", false);
|
||||
var selection = getSelection();
|
||||
p.end();
|
||||
|
||||
|
||||
function topLevel(n)
|
||||
{
|
||||
if ((!n) || n == root) return null;
|
||||
|
@ -1458,7 +1458,7 @@ function Ace2Inner(){
|
|||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
if (selection)
|
||||
{
|
||||
var node1 = topLevel(selection.startPoint.node);
|
||||
|
@ -1704,7 +1704,7 @@ function Ace2Inner(){
|
|||
root:root,
|
||||
point:selection.startPoint,
|
||||
documentAttributeManager: documentAttributeManager
|
||||
});
|
||||
});
|
||||
selStart = (selStartFromHook==null||selStartFromHook.length==0)?getLineAndCharForPoint(selection.startPoint):selStartFromHook;
|
||||
}
|
||||
if (selection && !selEnd)
|
||||
|
@ -1717,7 +1717,7 @@ function Ace2Inner(){
|
|||
point:selection.endPoint,
|
||||
documentAttributeManager: documentAttributeManager
|
||||
});
|
||||
selEnd = (selEndFromHook==null||selEndFromHook.length==0)?getLineAndCharForPoint(selection.endPoint):selEndFromHook;
|
||||
selEnd = (selEndFromHook==null||selEndFromHook.length==0)?getLineAndCharForPoint(selection.endPoint):selEndFromHook;
|
||||
}
|
||||
|
||||
// selection from content collection can, in various ways, extend past final
|
||||
|
@ -1738,7 +1738,7 @@ function Ace2Inner(){
|
|||
// update rep if we have a new selection
|
||||
// NOTE: IE loses the selection when you click stuff in e.g. the
|
||||
// editbar, so removing the selection when it's lost is not a good
|
||||
// idea.
|
||||
// idea.
|
||||
if (selection) repSelectionChange(selStart, selEnd, selection && selection.focusAtStart);
|
||||
// update browser selection
|
||||
p.mark("browsel");
|
||||
|
@ -1873,19 +1873,19 @@ function Ace2Inner(){
|
|||
return rep.selStart[0];
|
||||
}
|
||||
editorInfo.ace_caretLine = caretLine;
|
||||
|
||||
|
||||
function caretColumn()
|
||||
{
|
||||
return rep.selStart[1];
|
||||
}
|
||||
editorInfo.ace_caretColumn = caretColumn;
|
||||
|
||||
|
||||
function caretDocChar()
|
||||
{
|
||||
return rep.lines.offsetOfIndex(caretLine()) + caretColumn();
|
||||
}
|
||||
editorInfo.ace_caretDocChar = caretDocChar;
|
||||
|
||||
|
||||
function handleReturnIndentation()
|
||||
{
|
||||
// on return, indent to level of previous line
|
||||
|
@ -2314,8 +2314,8 @@ function Ace2Inner(){
|
|||
documentAttributeManager.setAttributesOnRange(lineAndColumnFromChar(start), lineAndColumnFromChar(end), attribs);
|
||||
}
|
||||
editorInfo.ace_performDocumentApplyAttributesToCharRange = performDocumentApplyAttributesToCharRange;
|
||||
|
||||
|
||||
|
||||
|
||||
function setAttributeOnSelection(attributeName, attributeValue)
|
||||
{
|
||||
if (!(rep.selStart && rep.selEnd)) return;
|
||||
|
@ -2879,7 +2879,7 @@ function Ace2Inner(){
|
|||
{
|
||||
if (lineClass !== null) lineElem.className = lineClass;
|
||||
};
|
||||
|
||||
|
||||
result.prepareForAdd = writeClass;
|
||||
result.finishUpdate = writeClass;
|
||||
result.getInnerHTML = function()
|
||||
|
@ -3241,7 +3241,7 @@ function Ace2Inner(){
|
|||
{
|
||||
return (n.tagName || '').toLowerCase() == "a" && n.href;
|
||||
}
|
||||
|
||||
|
||||
// only want to catch left-click
|
||||
if ((!evt.ctrlKey) && (evt.button != 2) && (evt.button != 3))
|
||||
{
|
||||
|
@ -3277,7 +3277,7 @@ function Ace2Inner(){
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var lineNum = rep.selStart[0];
|
||||
var listType = getLineListType(lineNum);
|
||||
|
||||
|
@ -3287,7 +3287,7 @@ function Ace2Inner(){
|
|||
listType = /([a-z]+)([12345678])/.exec(listType);
|
||||
var type = listType[1];
|
||||
var level = Number(listType[2]);
|
||||
|
||||
|
||||
//detect empty list item; exclude indentation
|
||||
if(text === '*' && type !== "indent")
|
||||
{
|
||||
|
@ -3401,9 +3401,9 @@ function Ace2Inner(){
|
|||
var thisLineListType = getLineListType(theLine);
|
||||
var prevLineEntry = (theLine > 0 && rep.lines.atIndex(theLine - 1));
|
||||
var prevLineBlank = (prevLineEntry && prevLineEntry.text.length == prevLineEntry.lineMarker);
|
||||
|
||||
|
||||
var thisLineHasMarker = documentAttributeManager.lineHasMarker(theLine);
|
||||
|
||||
|
||||
if (thisLineListType)
|
||||
{
|
||||
// this line is a list
|
||||
|
@ -3478,7 +3478,7 @@ function Ace2Inner(){
|
|||
return !!REGEX_WORDCHAR.exec(c);
|
||||
}
|
||||
editorInfo.ace_isWordChar = isWordChar;
|
||||
|
||||
|
||||
function isSpaceChar(c)
|
||||
{
|
||||
return !!REGEX_SPACE.exec(c);
|
||||
|
@ -4011,7 +4011,7 @@ function Ace2Inner(){
|
|||
maxIndex: tn.nodeValue.length
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
var selection = {};
|
||||
if (origSelectionRange.compareEndPoints("StartToEnd", origSelectionRange) === 0)
|
||||
{
|
||||
|
@ -4875,9 +4875,9 @@ function Ace2Inner(){
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var listAttributeName = 'list';
|
||||
|
||||
|
||||
function getLineListType(lineNum)
|
||||
{
|
||||
return documentAttributeManager.getAttributeOnLine(lineNum, listAttributeName)
|
||||
|
@ -4890,7 +4890,7 @@ function Ace2Inner(){
|
|||
}else{
|
||||
documentAttributeManager.setAttributeOnLine(lineNum, listAttributeName, listType);
|
||||
}
|
||||
|
||||
|
||||
//if the list has been removed, it is necessary to renumber
|
||||
//starting from the *next* line because the list may have been
|
||||
//separated. If it returns null, it means that the list was not cut, try
|
||||
|
@ -4900,7 +4900,7 @@ function Ace2Inner(){
|
|||
renumberList(lineNum);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function renumberList(lineNum){
|
||||
//1-check we are in a list
|
||||
var type = getLineListType(lineNum);
|
||||
|
@ -4913,7 +4913,7 @@ function Ace2Inner(){
|
|||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
//2-find the first line of the list
|
||||
while(lineNum-1 >= 0 && (type=getLineListType(lineNum-1)))
|
||||
{
|
||||
|
@ -4922,7 +4922,7 @@ function Ace2Inner(){
|
|||
break;
|
||||
lineNum--;
|
||||
}
|
||||
|
||||
|
||||
//3-renumber every list item of the same level from the beginning, level 1
|
||||
//IMPORTANT: never skip a level because there imbrication may be arbitrary
|
||||
var builder = Changeset.builder(rep.lines.totalWidth());
|
||||
|
@ -4949,7 +4949,7 @@ function Ace2Inner(){
|
|||
ChangesetUtils.buildKeepRange(rep, builder, loc, (loc = [line, 1]), [
|
||||
['start', position]
|
||||
], rep.apool);
|
||||
|
||||
|
||||
position++;
|
||||
line++;
|
||||
}
|
||||
|
@ -4964,19 +4964,19 @@ function Ace2Inner(){
|
|||
}
|
||||
return line;
|
||||
}
|
||||
|
||||
|
||||
applyNumberList(lineNum, 1);
|
||||
var cs = builder.toString();
|
||||
if (!Changeset.isIdentity(cs))
|
||||
{
|
||||
performDocumentApplyChangeset(cs);
|
||||
}
|
||||
|
||||
|
||||
//4-apply the modifications
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function doInsertList(type)
|
||||
{
|
||||
|
@ -5014,12 +5014,12 @@ function Ace2Inner(){
|
|||
var t = getLineListType(n);
|
||||
mods.push([n, allLinesAreList ? 'indent' + level : (t ? type + level : type + '1')]);
|
||||
}
|
||||
|
||||
|
||||
_.each(mods, function(mod){
|
||||
setLineListType(mod[0], mod[1]);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function doInsertUnorderedList(){
|
||||
doInsertList('bullet');
|
||||
}
|
||||
|
@ -5353,7 +5353,7 @@ function Ace2Inner(){
|
|||
}
|
||||
};
|
||||
})());
|
||||
|
||||
|
||||
var lineNumbersShown;
|
||||
var sideDivInner;
|
||||
|
||||
|
@ -5369,11 +5369,11 @@ function Ace2Inner(){
|
|||
var newNumLines = rep.lines.length();
|
||||
if (newNumLines < 1) newNumLines = 1;
|
||||
//update height of all current line numbers
|
||||
|
||||
|
||||
var a = sideDivInner.firstChild;
|
||||
var b = doc.body.firstChild;
|
||||
var n = 0;
|
||||
|
||||
|
||||
if (currentCallStack && currentCallStack.domClean)
|
||||
{
|
||||
|
||||
|
@ -5403,8 +5403,8 @@ function Ace2Inner(){
|
|||
b = b.nextSibling;
|
||||
n++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (newNumLines != lineNumbersShown)
|
||||
{
|
||||
var container = sideDivInner;
|
||||
|
@ -5414,21 +5414,21 @@ function Ace2Inner(){
|
|||
{
|
||||
lineNumbersShown++;
|
||||
var n = lineNumbersShown;
|
||||
var div = odoc.createElement("DIV");
|
||||
var div = odoc.createElement("DIV");
|
||||
//calculate height for new line number
|
||||
var h = (b.clientHeight || b.offsetHeight);
|
||||
|
||||
|
||||
if (b.nextSibling)
|
||||
h = b.nextSibling.offsetTop - b.offsetTop;
|
||||
|
||||
|
||||
if(h) // apply style to div
|
||||
div.style.height = h +"px";
|
||||
|
||||
|
||||
div.appendChild(odoc.createTextNode(String(n)));
|
||||
fragment.appendChild(div);
|
||||
b = b.nextSibling;
|
||||
}
|
||||
|
||||
|
||||
container.appendChild(fragment);
|
||||
while (lineNumbersShown > newNumLines)
|
||||
{
|
||||
|
@ -5437,8 +5437,8 @@ function Ace2Inner(){
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Init documentAttributeManager
|
||||
documentAttributeManager = new AttributeManager(rep, performDocumentApplyChangeset);
|
||||
editorInfo.ace_performDocumentApplyAttributesToRange = function () {
|
||||
|
@ -5484,13 +5484,13 @@ function Ace2Inner(){
|
|||
bindTheEventHandlers();
|
||||
|
||||
});
|
||||
|
||||
|
||||
hooks.callAll('aceInitialized', {
|
||||
editorInfo: editorInfo,
|
||||
rep: rep,
|
||||
documentAttributeManager: documentAttributeManager
|
||||
});
|
||||
|
||||
|
||||
scheduler.setTimeout(function()
|
||||
{
|
||||
parent.readyFunc(); // defined in code that sets up the inner iframe
|
||||
|
|
|
@ -1,180 +1,180 @@
|
|||
// Autosize 1.13 - jQuery plugin for textareas
|
||||
// (c) 2012 Jack Moore - jacklmoore.com
|
||||
// license: www.opensource.org/licenses/mit-license.php
|
||||
|
||||
(function ($) {
|
||||
var
|
||||
defaults = {
|
||||
className: 'autosizejs',
|
||||
append: "",
|
||||
callback: false
|
||||
},
|
||||
hidden = 'hidden',
|
||||
borderBox = 'border-box',
|
||||
lineHeight = 'lineHeight',
|
||||
copy = '<textarea tabindex="-1" style="position:absolute; top:-9999px; left:-9999px; right:auto; bottom:auto; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; word-wrap:break-word; height:0 !important; min-height:0 !important; overflow:hidden;"/>',
|
||||
// line-height is omitted because IE7/IE8 doesn't return the correct value.
|
||||
copyStyle = [
|
||||
'fontFamily',
|
||||
'fontSize',
|
||||
'fontWeight',
|
||||
'fontStyle',
|
||||
'letterSpacing',
|
||||
'textTransform',
|
||||
'wordSpacing',
|
||||
'textIndent'
|
||||
],
|
||||
oninput = 'oninput',
|
||||
onpropertychange = 'onpropertychange',
|
||||
test = $(copy)[0];
|
||||
|
||||
// For testing support in old FireFox
|
||||
test.setAttribute(oninput, "return");
|
||||
|
||||
if ($.isFunction(test[oninput]) || onpropertychange in test) {
|
||||
|
||||
// test that line-height can be accurately copied to avoid
|
||||
// incorrect value reporting in old IE and old Opera
|
||||
$(test).css(lineHeight, '99px');
|
||||
if ($(test).css(lineHeight) === '99px') {
|
||||
copyStyle.push(lineHeight);
|
||||
}
|
||||
|
||||
$.fn.autosize = function (options) {
|
||||
options = $.extend({}, defaults, options || {});
|
||||
|
||||
return this.each(function () {
|
||||
var
|
||||
ta = this,
|
||||
$ta = $(ta),
|
||||
mirror,
|
||||
minHeight = $ta.height(),
|
||||
maxHeight = parseInt($ta.css('maxHeight'), 10),
|
||||
active,
|
||||
i = copyStyle.length,
|
||||
resize,
|
||||
boxOffset = 0,
|
||||
value = ta.value,
|
||||
callback = $.isFunction(options.callback);
|
||||
|
||||
if ($ta.css('box-sizing') === borderBox || $ta.css('-moz-box-sizing') === borderBox || $ta.css('-webkit-box-sizing') === borderBox){
|
||||
boxOffset = $ta.outerHeight() - $ta.height();
|
||||
}
|
||||
|
||||
if ($ta.data('mirror') || $ta.data('ismirror')) {
|
||||
// if autosize has already been applied, exit.
|
||||
// if autosize is being applied to a mirror element, exit.
|
||||
return;
|
||||
} else {
|
||||
mirror = $(copy).data('ismirror', true).addClass(options.className)[0];
|
||||
|
||||
resize = $ta.css('resize') === 'none' ? 'none' : 'horizontal';
|
||||
|
||||
$ta.data('mirror', $(mirror)).css({
|
||||
overflow: hidden,
|
||||
overflowY: hidden,
|
||||
wordWrap: 'break-word',
|
||||
resize: resize
|
||||
});
|
||||
}
|
||||
|
||||
// Opera returns '-1px' when max-height is set to 'none'.
|
||||
maxHeight = maxHeight && maxHeight > 0 ? maxHeight : 9e4;
|
||||
|
||||
// Using mainly bare JS in this function because it is going
|
||||
// to fire very often while typing, and needs to very efficient.
|
||||
function adjust() {
|
||||
var height, overflow, original;
|
||||
|
||||
// the active flag keeps IE from tripping all over itself. Otherwise
|
||||
// actions in the adjust function will cause IE to call adjust again.
|
||||
if (!active) {
|
||||
active = true;
|
||||
mirror.value = ta.value + options.append;
|
||||
mirror.style.overflowY = ta.style.overflowY;
|
||||
original = parseInt(ta.style.height,10);
|
||||
|
||||
// Update the width in case the original textarea width has changed
|
||||
mirror.style.width = $ta.css('width');
|
||||
|
||||
// Needed for IE to reliably return the correct scrollHeight
|
||||
mirror.scrollTop = 0;
|
||||
|
||||
// Set a very high value for scrollTop to be sure the
|
||||
// mirror is scrolled all the way to the bottom.
|
||||
mirror.scrollTop = 9e4;
|
||||
|
||||
height = mirror.scrollTop;
|
||||
overflow = hidden;
|
||||
if (height > maxHeight) {
|
||||
height = maxHeight;
|
||||
overflow = 'scroll';
|
||||
} else if (height < minHeight) {
|
||||
height = minHeight;
|
||||
}
|
||||
height += boxOffset;
|
||||
ta.style.overflowY = overflow;
|
||||
|
||||
if (original !== height) {
|
||||
ta.style.height = height + 'px';
|
||||
if (callback) {
|
||||
options.callback.call(ta);
|
||||
}
|
||||
}
|
||||
|
||||
// This small timeout gives IE a chance to draw it's scrollbar
|
||||
// before adjust can be run again (prevents an infinite loop).
|
||||
setTimeout(function () {
|
||||
active = false;
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// mirror is a duplicate textarea located off-screen that
|
||||
// is automatically updated to contain the same text as the
|
||||
// original textarea. mirror always has a height of 0.
|
||||
// This gives a cross-browser supported way getting the actual
|
||||
// height of the text, through the scrollTop property.
|
||||
while (i--) {
|
||||
mirror.style[copyStyle[i]] = $ta.css(copyStyle[i]);
|
||||
}
|
||||
|
||||
$('body').append(mirror);
|
||||
|
||||
if (onpropertychange in ta) {
|
||||
if (oninput in ta) {
|
||||
// Detects IE9. IE9 does not fire onpropertychange or oninput for deletions,
|
||||
// so binding to onkeyup to catch most of those occassions. There is no way that I
|
||||
// know of to detect something like 'cut' in IE9.
|
||||
ta[oninput] = ta.onkeyup = adjust;
|
||||
} else {
|
||||
// IE7 / IE8
|
||||
ta[onpropertychange] = adjust;
|
||||
}
|
||||
} else {
|
||||
// Modern Browsers
|
||||
ta[oninput] = adjust;
|
||||
|
||||
// The textarea overflow is now hidden. But Chrome doesn't reflow the text after the scrollbars are removed.
|
||||
// This is a hack to get Chrome to reflow it's text.
|
||||
ta.value = '';
|
||||
ta.value = value;
|
||||
}
|
||||
|
||||
$(window).resize(adjust);
|
||||
|
||||
// Allow for manual triggering if needed.
|
||||
$ta.bind('autosize', adjust);
|
||||
|
||||
// Call adjust in case the textarea already contains text.
|
||||
adjust();
|
||||
});
|
||||
};
|
||||
} else {
|
||||
// Makes no changes for older browsers (FireFox3- and Safari4-)
|
||||
$.fn.autosize = function (callback) {
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
// Autosize 1.13 - jQuery plugin for textareas
|
||||
// (c) 2012 Jack Moore - jacklmoore.com
|
||||
// license: www.opensource.org/licenses/mit-license.php
|
||||
|
||||
(function ($) {
|
||||
var
|
||||
defaults = {
|
||||
className: 'autosizejs',
|
||||
append: "",
|
||||
callback: false
|
||||
},
|
||||
hidden = 'hidden',
|
||||
borderBox = 'border-box',
|
||||
lineHeight = 'lineHeight',
|
||||
copy = '<textarea tabindex="-1" style="position:absolute; top:-9999px; left:-9999px; right:auto; bottom:auto; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; word-wrap:break-word; height:0 !important; min-height:0 !important; overflow:hidden;"/>',
|
||||
// line-height is omitted because IE7/IE8 doesn't return the correct value.
|
||||
copyStyle = [
|
||||
'fontFamily',
|
||||
'fontSize',
|
||||
'fontWeight',
|
||||
'fontStyle',
|
||||
'letterSpacing',
|
||||
'textTransform',
|
||||
'wordSpacing',
|
||||
'textIndent'
|
||||
],
|
||||
oninput = 'oninput',
|
||||
onpropertychange = 'onpropertychange',
|
||||
test = $(copy)[0];
|
||||
|
||||
// For testing support in old FireFox
|
||||
test.setAttribute(oninput, "return");
|
||||
|
||||
if ($.isFunction(test[oninput]) || onpropertychange in test) {
|
||||
|
||||
// test that line-height can be accurately copied to avoid
|
||||
// incorrect value reporting in old IE and old Opera
|
||||
$(test).css(lineHeight, '99px');
|
||||
if ($(test).css(lineHeight) === '99px') {
|
||||
copyStyle.push(lineHeight);
|
||||
}
|
||||
|
||||
$.fn.autosize = function (options) {
|
||||
options = $.extend({}, defaults, options || {});
|
||||
|
||||
return this.each(function () {
|
||||
var
|
||||
ta = this,
|
||||
$ta = $(ta),
|
||||
mirror,
|
||||
minHeight = $ta.height(),
|
||||
maxHeight = parseInt($ta.css('maxHeight'), 10),
|
||||
active,
|
||||
i = copyStyle.length,
|
||||
resize,
|
||||
boxOffset = 0,
|
||||
value = ta.value,
|
||||
callback = $.isFunction(options.callback);
|
||||
|
||||
if ($ta.css('box-sizing') === borderBox || $ta.css('-moz-box-sizing') === borderBox || $ta.css('-webkit-box-sizing') === borderBox){
|
||||
boxOffset = $ta.outerHeight() - $ta.height();
|
||||
}
|
||||
|
||||
if ($ta.data('mirror') || $ta.data('ismirror')) {
|
||||
// if autosize has already been applied, exit.
|
||||
// if autosize is being applied to a mirror element, exit.
|
||||
return;
|
||||
} else {
|
||||
mirror = $(copy).data('ismirror', true).addClass(options.className)[0];
|
||||
|
||||
resize = $ta.css('resize') === 'none' ? 'none' : 'horizontal';
|
||||
|
||||
$ta.data('mirror', $(mirror)).css({
|
||||
overflow: hidden,
|
||||
overflowY: hidden,
|
||||
wordWrap: 'break-word',
|
||||
resize: resize
|
||||
});
|
||||
}
|
||||
|
||||
// Opera returns '-1px' when max-height is set to 'none'.
|
||||
maxHeight = maxHeight && maxHeight > 0 ? maxHeight : 9e4;
|
||||
|
||||
// Using mainly bare JS in this function because it is going
|
||||
// to fire very often while typing, and needs to very efficient.
|
||||
function adjust() {
|
||||
var height, overflow, original;
|
||||
|
||||
// the active flag keeps IE from tripping all over itself. Otherwise
|
||||
// actions in the adjust function will cause IE to call adjust again.
|
||||
if (!active) {
|
||||
active = true;
|
||||
mirror.value = ta.value + options.append;
|
||||
mirror.style.overflowY = ta.style.overflowY;
|
||||
original = parseInt(ta.style.height,10);
|
||||
|
||||
// Update the width in case the original textarea width has changed
|
||||
mirror.style.width = $ta.css('width');
|
||||
|
||||
// Needed for IE to reliably return the correct scrollHeight
|
||||
mirror.scrollTop = 0;
|
||||
|
||||
// Set a very high value for scrollTop to be sure the
|
||||
// mirror is scrolled all the way to the bottom.
|
||||
mirror.scrollTop = 9e4;
|
||||
|
||||
height = mirror.scrollTop;
|
||||
overflow = hidden;
|
||||
if (height > maxHeight) {
|
||||
height = maxHeight;
|
||||
overflow = 'scroll';
|
||||
} else if (height < minHeight) {
|
||||
height = minHeight;
|
||||
}
|
||||
height += boxOffset;
|
||||
ta.style.overflowY = overflow;
|
||||
|
||||
if (original !== height) {
|
||||
ta.style.height = height + 'px';
|
||||
if (callback) {
|
||||
options.callback.call(ta);
|
||||
}
|
||||
}
|
||||
|
||||
// This small timeout gives IE a chance to draw it's scrollbar
|
||||
// before adjust can be run again (prevents an infinite loop).
|
||||
setTimeout(function () {
|
||||
active = false;
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// mirror is a duplicate textarea located off-screen that
|
||||
// is automatically updated to contain the same text as the
|
||||
// original textarea. mirror always has a height of 0.
|
||||
// This gives a cross-browser supported way getting the actual
|
||||
// height of the text, through the scrollTop property.
|
||||
while (i--) {
|
||||
mirror.style[copyStyle[i]] = $ta.css(copyStyle[i]);
|
||||
}
|
||||
|
||||
$('body').append(mirror);
|
||||
|
||||
if (onpropertychange in ta) {
|
||||
if (oninput in ta) {
|
||||
// Detects IE9. IE9 does not fire onpropertychange or oninput for deletions,
|
||||
// so binding to onkeyup to catch most of those occassions. There is no way that I
|
||||
// know of to detect something like 'cut' in IE9.
|
||||
ta[oninput] = ta.onkeyup = adjust;
|
||||
} else {
|
||||
// IE7 / IE8
|
||||
ta[onpropertychange] = adjust;
|
||||
}
|
||||
} else {
|
||||
// Modern Browsers
|
||||
ta[oninput] = adjust;
|
||||
|
||||
// The textarea overflow is now hidden. But Chrome doesn't reflow the text after the scrollbars are removed.
|
||||
// This is a hack to get Chrome to reflow it's text.
|
||||
ta.value = '';
|
||||
ta.value = value;
|
||||
}
|
||||
|
||||
$(window).resize(adjust);
|
||||
|
||||
// Allow for manual triggering if needed.
|
||||
$ta.bind('autosize', adjust);
|
||||
|
||||
// Call adjust in case the textarea already contains text.
|
||||
adjust();
|
||||
});
|
||||
};
|
||||
} else {
|
||||
// Makes no changes for older browsers (FireFox3- and Safari4-)
|
||||
$.fn.autosize = function (callback) {
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
}(jQuery));
|
|
@ -7,18 +7,18 @@
|
|||
if (typeof global.JSON == "undefined" || !global.JSON) {
|
||||
global.JSON = {};
|
||||
}
|
||||
|
||||
|
||||
global.JSON.minify = function(json) {
|
||||
|
||||
|
||||
var tokenizer = /"|(\/\*)|(\*\/)|(\/\/)|\n|\r/g,
|
||||
in_string = false,
|
||||
in_multiline_comment = false,
|
||||
in_singleline_comment = false,
|
||||
tmp, tmp2, new_str = [], ns = 0, from = 0, lc, rc
|
||||
;
|
||||
|
||||
|
||||
tokenizer.lastIndex = 0;
|
||||
|
||||
|
||||
while (tmp = tokenizer.exec(json)) {
|
||||
lc = RegExp.leftContext;
|
||||
rc = RegExp.rightContext;
|
||||
|
@ -30,7 +30,7 @@
|
|||
new_str[ns++] = tmp2;
|
||||
}
|
||||
from = tokenizer.lastIndex;
|
||||
|
||||
|
||||
if (tmp[0] == "\"" && !in_multiline_comment && !in_singleline_comment) {
|
||||
tmp2 = lc.match(/(\\)*$/);
|
||||
if (!in_string || !tmp2 || (tmp2[0].length % 2) == 0) { // start of string with ", or unescaped " character found to end string
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
$(document).ready(function () {
|
||||
|
||||
|
||||
var socket,
|
||||
loc = document.location,
|
||||
port = loc.port == "" ? (loc.protocol == "https:" ? 443 : 80) : loc.port,
|
||||
|
@ -81,7 +81,7 @@ $(document).ready(function () {
|
|||
message = "<span class='status'>" + data.message.toString() + "</span>";
|
||||
}
|
||||
if (data.error) {
|
||||
message = "<span class='error'>" + data.error.toString() + "<span>";
|
||||
message = "<span class='error'>" + data.error.toString() + "<span>";
|
||||
}
|
||||
$("#progress.dialog .message").html(message);
|
||||
$("#progress.dialog .history").append("<div>" + message + "</div>");
|
||||
|
|
|
@ -18,11 +18,11 @@ $(document).ready(function () {
|
|||
{
|
||||
$('.settings').append(settings.results);
|
||||
$('.settings').focus();
|
||||
$('.settings').autosize();
|
||||
$('.settings').autosize();
|
||||
}
|
||||
else{
|
||||
alert("YOUR JSON IS BAD AND YOU SHOULD FEEL BAD");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/* When the admin clicks save Settings check the JSON then send the JSON back to the server */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -274,12 +274,12 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
|
|||
padContents.currentTime += timeDelta;
|
||||
debugLog('Time Delta: ', timeDelta)
|
||||
updateTimer();
|
||||
|
||||
|
||||
var authors = _.map(padContents.getActiveAuthors(), function(name)
|
||||
{
|
||||
return authorData[name];
|
||||
});
|
||||
|
||||
|
||||
BroadcastSlider.setAuthors(authors);
|
||||
}
|
||||
|
||||
|
@ -292,9 +292,9 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
|
|||
str = '0' + str;
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var date = new Date(padContents.currentTime);
|
||||
var dateFormat = function()
|
||||
{
|
||||
|
@ -306,18 +306,18 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
|
|||
var seconds = zpad(date.getSeconds(), 2);
|
||||
return ([month, '/', day, '/', year, ' ', hours, ':', minutes, ':', seconds].join(""));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$('#timer').html(dateFormat());
|
||||
|
||||
var revisionDate = ["Saved", ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"][date.getMonth()], date.getDate() + ",", date.getFullYear()].join(" ")
|
||||
$('#revision_date').html(revisionDate)
|
||||
|
||||
}
|
||||
|
||||
|
||||
updateTimer();
|
||||
|
||||
function goToRevision(newRevision)
|
||||
|
@ -380,7 +380,7 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
|
|||
|
||||
changesetLoader.queueUp(start, 1, update);
|
||||
}
|
||||
|
||||
|
||||
var authors = _.map(padContents.getActiveAuthors(), function(name){
|
||||
return authorData[name];
|
||||
});
|
||||
|
@ -549,7 +549,7 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
|
|||
goToRevision.apply(goToRevision, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BroadcastSlider.onSlider(goToRevisionIfEnabled);
|
||||
|
||||
var dynamicCSS = makeCSSManager('dynamicsyntax');
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -56,7 +56,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
slidercallbacks[i](newval);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var updateSliderElements = function()
|
||||
{
|
||||
for (var i = 0; i < savedRevisions.length; i++)
|
||||
|
@ -65,7 +65,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
savedRevisions[i].css('left', (position * ($("#ui-slider-bar").width() - 2) / (sliderLength * 1.0)) - 1);
|
||||
}
|
||||
$("#ui-slider-handle").css('left', sliderPos * ($("#ui-slider-bar").width() - 2) / (sliderLength * 1.0));
|
||||
}
|
||||
}
|
||||
|
||||
var addSavedRevision = function(position, info)
|
||||
{
|
||||
|
@ -162,7 +162,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
var height = $('#timeslider-top').height();
|
||||
$('#editorcontainerbox').css({marginTop: height});
|
||||
}, 600);
|
||||
|
||||
|
||||
function setAuthors(authors)
|
||||
{
|
||||
var authorsList = $("#authorsList");
|
||||
|
@ -176,7 +176,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
if (author.name)
|
||||
{
|
||||
if (numNamed !== 0) authorsList.append(', ');
|
||||
|
||||
|
||||
$('<span />')
|
||||
.text(author.name || "unnamed")
|
||||
.css('background-color', authorColor)
|
||||
|
@ -199,11 +199,11 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
} else {
|
||||
authorsList.append(anonymousAuthorString);
|
||||
}
|
||||
|
||||
|
||||
if(colorsAnonymous.length > 0){
|
||||
authorsList.append(' (');
|
||||
_.each(colorsAnonymous, function(color, i){
|
||||
if( i > 0 ) authorsList.append(' ');
|
||||
if( i > 0 ) authorsList.append(' ');
|
||||
$('<span> </span>')
|
||||
.css('background-color', color)
|
||||
.addClass('author author-anonymous')
|
||||
|
@ -211,13 +211,13 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
});
|
||||
authorsList.append(')');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (authors.length == 0)
|
||||
{
|
||||
authorsList.append("No Authors");
|
||||
}
|
||||
|
||||
|
||||
fixPadHeight();
|
||||
}
|
||||
|
||||
|
@ -275,7 +275,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
{
|
||||
disableSelection($("#playpause_button")[0]);
|
||||
disableSelection($("#timeslider")[0]);
|
||||
|
||||
|
||||
$(document).keyup(function(e)
|
||||
{
|
||||
var code = -1;
|
||||
|
@ -320,7 +320,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
else if (code == 32) playpause();
|
||||
|
||||
});
|
||||
|
||||
|
||||
$(window).resize(function()
|
||||
{
|
||||
updateSliderElements();
|
||||
|
@ -470,16 +470,16 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
|
|||
$("#revision").css('right', "20px");
|
||||
$("#revision").css('top', "20px");
|
||||
}
|
||||
|
||||
|
||||
$("#timeslider").show();
|
||||
setSliderLength(clientVars.collab_client_vars.rev);
|
||||
setSliderPosition(clientVars.collab_client_vars.rev);
|
||||
|
||||
|
||||
_.each(clientVars.savedRevisions, function(revision)
|
||||
{
|
||||
addSavedRevision(revision.revNum, revision);
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -30,8 +30,8 @@ var chat = (function()
|
|||
var isStuck = false;
|
||||
var chatMentions = 0;
|
||||
var self = {
|
||||
show: function ()
|
||||
{
|
||||
show: function ()
|
||||
{
|
||||
$("#chaticon").hide();
|
||||
$("#chatbox").show();
|
||||
self.scrollDown();
|
||||
|
@ -55,7 +55,7 @@ var chat = (function()
|
|||
isStuck = false;
|
||||
}
|
||||
},
|
||||
hide: function ()
|
||||
hide: function ()
|
||||
{
|
||||
$("#chatcounter").text("0");
|
||||
$("#chaticon").show();
|
||||
|
@ -69,7 +69,7 @@ var chat = (function()
|
|||
self.lastMessage = $('#chattext > p').eq(-1);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
send: function()
|
||||
{
|
||||
var text = $("#chatinput").val();
|
||||
|
@ -77,10 +77,10 @@ var chat = (function()
|
|||
$("#chatinput").val("");
|
||||
},
|
||||
addMessage: function(msg, increment)
|
||||
{
|
||||
{
|
||||
//correct the time
|
||||
msg.time += this._pad.clientTimeOffset;
|
||||
|
||||
|
||||
//create the time string
|
||||
var minutes = "" + new Date(msg.time).getMinutes();
|
||||
var hours = "" + new Date(msg.time).getHours();
|
||||
|
@ -89,7 +89,7 @@ var chat = (function()
|
|||
if(hours.length == 1)
|
||||
hours = "0" + hours ;
|
||||
var timeStr = hours + ":" + minutes;
|
||||
|
||||
|
||||
//create the authorclass
|
||||
var authorClass = "author-" + msg.userId.replace(/[^a-y0-9]/g, function(c)
|
||||
{
|
||||
|
@ -109,20 +109,20 @@ var chat = (function()
|
|||
}
|
||||
/* End of new action */
|
||||
|
||||
var authorName = msg.userName == null ? "unnamed" : padutils.escapeHtml(msg.userName);
|
||||
|
||||
var authorName = msg.userName == null ? "unnamed" : padutils.escapeHtml(msg.userName);
|
||||
|
||||
var html = "<p class='" + authorClass + "'><b>" + authorName + ":</b><span class='time " + authorClass + "'>" + timeStr + "</span> " + text + "</p>";
|
||||
$("#chattext").append(html);
|
||||
|
||||
|
||||
//should we increment the counter??
|
||||
if(increment)
|
||||
{
|
||||
var count = Number($("#chatcounter").text());
|
||||
count++;
|
||||
|
||||
|
||||
// is the users focus already in the chatbox?
|
||||
var alreadyFocused = $("#chatinput").is(":focus");
|
||||
|
||||
|
||||
$("#chatcounter").text(count);
|
||||
// chat throb stuff -- Just make it throw for twice as long
|
||||
if(wasMentioned && !alreadyFocused)
|
||||
|
@ -156,7 +156,7 @@ var chat = (function()
|
|||
self.send();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var that = this;
|
||||
$.each(clientVars.chatHistory, function(i, o){
|
||||
that.addMessage(o, false);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -366,7 +366,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
|
|||
msg.userInfo.colorId = initialUserInfo.globalUserColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (userSet[id])
|
||||
{
|
||||
userSet[id] = userInfo;
|
||||
|
@ -433,7 +433,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
|
|||
{
|
||||
colorId = clientVars.colorPalette[colorId];
|
||||
}
|
||||
|
||||
|
||||
var cssColor = colorId;
|
||||
if (inactive)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -241,14 +241,14 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
|||
{
|
||||
state.listNesting = (state.listNesting || 0) + 1;
|
||||
}
|
||||
|
||||
|
||||
if(listType === 'none' || !listType ){
|
||||
delete state.lineAttributes['list'];
|
||||
delete state.lineAttributes['list'];
|
||||
}
|
||||
else{
|
||||
state.lineAttributes['list'] = listType;
|
||||
}
|
||||
|
||||
|
||||
_recalcAttribString(state);
|
||||
return oldListType;
|
||||
}
|
||||
|
@ -315,7 +315,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
|||
return [key, value];
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
lines.appendText('*', Changeset.makeAttribsString('+', attributes , apool));
|
||||
}
|
||||
cc.startNewLine = function(state)
|
||||
|
@ -385,7 +385,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
|||
text:txt,
|
||||
styl: null,
|
||||
cls: null
|
||||
});
|
||||
});
|
||||
var txt = (typeof(txtFromHook)=='object'&&txtFromHook.length==0)?dom.nodeValue(node):txtFromHook[0];
|
||||
|
||||
var rest = '';
|
||||
|
@ -454,7 +454,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
|||
{
|
||||
var tname = (dom.nodeTagName(node) || "").toLowerCase();
|
||||
if (tname == "br")
|
||||
{
|
||||
{
|
||||
this.breakLine = true;
|
||||
var tvalue = dom.nodeAttr(node, 'value');
|
||||
var induceLineBreak = hooks.callAll('collectContentLineBreak', {
|
||||
|
@ -464,11 +464,11 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
|
|||
tvalue:tvalue,
|
||||
styl: null,
|
||||
cls: null
|
||||
});
|
||||
});
|
||||
var startNewLine= (typeof(induceLineBreak)=='object'&&induceLineBreak.length==0)?true:induceLineBreak[0];
|
||||
if(startNewLine){
|
||||
cc.startNewLine(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (tname == "script" || tname == "style")
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -26,7 +26,7 @@ function makeCSSManager(emptyStylesheetTitle)
|
|||
function getSheetByTitle(title)
|
||||
{
|
||||
var allSheets = document.styleSheets;
|
||||
|
||||
|
||||
for (var i = 0; i < allSheets.length; i++)
|
||||
{
|
||||
var s = allSheets[i];
|
||||
|
@ -37,7 +37,7 @@ function makeCSSManager(emptyStylesheetTitle)
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
var browserSheet = getSheetByTitle(emptyStylesheetTitle);
|
||||
|
||||
function browserRules()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -82,7 +82,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
|
|||
}
|
||||
|
||||
var html = [];
|
||||
var preHtml = '',
|
||||
var preHtml = '',
|
||||
postHtml = '';
|
||||
var curHTML = null;
|
||||
|
||||
|
@ -118,10 +118,10 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
|
|||
preHtml = '<ol '+start+' class="list-' + Security.escapeHTMLAttribute(listType) + '"><li>';
|
||||
postHtml = '</li></ol>';
|
||||
}
|
||||
}
|
||||
}
|
||||
processedMarker = true;
|
||||
}
|
||||
|
||||
|
||||
_.map(hooks.callAll("aceDomLineProcessLineAttributes", {
|
||||
domline: domline,
|
||||
cls: cls
|
||||
|
@ -131,11 +131,11 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
|
|||
postHtml += modifier.postHtml;
|
||||
processedMarker |= modifier.processedMarker;
|
||||
});
|
||||
|
||||
|
||||
if( processedMarker ){
|
||||
result.lineMarker += txt.length;
|
||||
return; // don't append any text
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -229,7 +229,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
|
|||
result.node.innerHTML = curHTML;
|
||||
}
|
||||
if (lineClass !== null) result.node.className = lineClass;
|
||||
|
||||
|
||||
hooks.callAll("acePostWriteDomLineHTML", {
|
||||
node: result.node
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Farbtastic 2.0 alpha
|
||||
(function ($) {
|
||||
|
||||
|
||||
var __debug = false;
|
||||
var __factor = 0.5;
|
||||
|
||||
|
@ -16,7 +16,7 @@ $.farbtastic = function (container, options) {
|
|||
|
||||
$._farbtastic = function (container, options) {
|
||||
var fb = this;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
|
@ -134,7 +134,7 @@ $._farbtastic = function (container, options) {
|
|||
fb.ctxOverlay = fb.cnvOverlay[0].getContext('2d');
|
||||
fb.ctxMask.translate(fb.mid, fb.mid);
|
||||
fb.ctxOverlay.translate(fb.mid, fb.mid);
|
||||
|
||||
|
||||
// Draw widget base layers.
|
||||
fb.drawCircle();
|
||||
fb.drawMask();
|
||||
|
@ -208,7 +208,7 @@ $._farbtastic = function (container, options) {
|
|||
m.restore();
|
||||
__debug && $('body').append('<div>drawCircle '+ (+(new Date()) - tm) +'ms');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Draw the saturation/luminance mask.
|
||||
*/
|
||||
|
@ -232,9 +232,9 @@ $._farbtastic = function (container, options) {
|
|||
|
||||
outputPixel(x, y, c, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Method #1: direct pixel access (new Canvas).
|
||||
if (fb.ctxMask.getImageData) {
|
||||
// Create half-resolution buffer.
|
||||
|
@ -295,7 +295,7 @@ $._farbtastic = function (container, options) {
|
|||
}
|
||||
cache.push([c, a]);
|
||||
});
|
||||
}
|
||||
}
|
||||
__debug && $('body').append('<div>drawMask '+ (+(new Date()) - tm) +'ms');
|
||||
}
|
||||
|
||||
|
@ -343,7 +343,7 @@ $._farbtastic = function (container, options) {
|
|||
|
||||
// Draw markers
|
||||
fb.drawMarkers();
|
||||
|
||||
|
||||
// Linked elements or callback
|
||||
if (typeof fb.callback == 'object') {
|
||||
// Set background/foreground color
|
||||
|
@ -363,15 +363,15 @@ $._farbtastic = function (container, options) {
|
|||
fb.callback.call(fb, fb.color);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper for returning coordinates relative to the center.
|
||||
*/
|
||||
fb.widgetCoords = function (event) {
|
||||
return {
|
||||
x: event.pageX - fb.offset.left - fb.mid,
|
||||
x: event.pageX - fb.offset.left - fb.mid,
|
||||
y: event.pageY - fb.offset.top - fb.mid
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -434,7 +434,7 @@ $._farbtastic = function (container, options) {
|
|||
fb.packDX = function (c, a) {
|
||||
return '#' + fb.dec2hex(a) + fb.dec2hex(c) + fb.dec2hex(c) + fb.dec2hex(c);
|
||||
};
|
||||
|
||||
|
||||
fb.pack = function (rgb) {
|
||||
var r = Math.round(rgb[0] * 255);
|
||||
var g = Math.round(rgb[1] * 255);
|
||||
|
|
82
src/static/js/jquery.js
vendored
82
src/static/js/jquery.js
vendored
|
@ -3885,7 +3885,7 @@ var Sizzle = function( selector, context, results, seed ) {
|
|||
if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
if ( !selector || typeof selector !== "string" ) {
|
||||
return results;
|
||||
}
|
||||
|
@ -3895,7 +3895,7 @@ var Sizzle = function( selector, context, results, seed ) {
|
|||
contextXML = Sizzle.isXML( context ),
|
||||
parts = [],
|
||||
soFar = selector;
|
||||
|
||||
|
||||
// Reset the position of the chunker regexp (start from head)
|
||||
do {
|
||||
chunker.exec( "" );
|
||||
|
@ -3903,9 +3903,9 @@ var Sizzle = function( selector, context, results, seed ) {
|
|||
|
||||
if ( m ) {
|
||||
soFar = m[3];
|
||||
|
||||
|
||||
parts.push( m[1] );
|
||||
|
||||
|
||||
if ( m[2] ) {
|
||||
extra = m[3];
|
||||
break;
|
||||
|
@ -3929,7 +3929,7 @@ var Sizzle = function( selector, context, results, seed ) {
|
|||
if ( Expr.relative[ selector ] ) {
|
||||
selector += parts.shift();
|
||||
}
|
||||
|
||||
|
||||
set = posProcess( selector, set, seed );
|
||||
}
|
||||
}
|
||||
|
@ -4057,7 +4057,7 @@ Sizzle.find = function( expr, context, isXML ) {
|
|||
|
||||
for ( i = 0, len = Expr.order.length; i < len; i++ ) {
|
||||
type = Expr.order[i];
|
||||
|
||||
|
||||
if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
|
||||
left = match[1];
|
||||
match.splice( 1, 1 );
|
||||
|
@ -4429,7 +4429,7 @@ var Expr = Sizzle.selectors = {
|
|||
|
||||
ATTR: function( match, curLoop, inplace, result, not, isXML ) {
|
||||
var name = match[1] = match[1].replace( rBackslash, "" );
|
||||
|
||||
|
||||
if ( !isXML && Expr.attrMap[name] ) {
|
||||
match[1] = Expr.attrMap[name];
|
||||
}
|
||||
|
@ -4463,7 +4463,7 @@ var Expr = Sizzle.selectors = {
|
|||
} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return match;
|
||||
},
|
||||
|
||||
|
@ -4473,7 +4473,7 @@ var Expr = Sizzle.selectors = {
|
|||
return match;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
filters: {
|
||||
enabled: function( elem ) {
|
||||
return elem.disabled === false && elem.type !== "hidden";
|
||||
|
@ -4486,14 +4486,14 @@ var Expr = Sizzle.selectors = {
|
|||
checked: function( elem ) {
|
||||
return elem.checked === true;
|
||||
},
|
||||
|
||||
|
||||
selected: function( elem ) {
|
||||
// Accessing this property makes selected-by-default
|
||||
// options in Safari work properly
|
||||
if ( elem.parentNode ) {
|
||||
elem.parentNode.selectedIndex;
|
||||
}
|
||||
|
||||
|
||||
return elem.selected === true;
|
||||
},
|
||||
|
||||
|
@ -4515,7 +4515,7 @@ var Expr = Sizzle.selectors = {
|
|||
|
||||
text: function( elem ) {
|
||||
var attr = elem.getAttribute( "type" ), type = elem.type;
|
||||
// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
|
||||
// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
|
||||
// use getAttribute instead to test this case
|
||||
return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
|
||||
},
|
||||
|
@ -4634,21 +4634,21 @@ var Expr = Sizzle.selectors = {
|
|||
case "only":
|
||||
case "first":
|
||||
while ( (node = node.previousSibling) ) {
|
||||
if ( node.nodeType === 1 ) {
|
||||
return false;
|
||||
if ( node.nodeType === 1 ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( type === "first" ) {
|
||||
return true;
|
||||
if ( type === "first" ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
node = elem;
|
||||
|
||||
case "last":
|
||||
while ( (node = node.nextSibling) ) {
|
||||
if ( node.nodeType === 1 ) {
|
||||
return false;
|
||||
if ( node.nodeType === 1 ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4661,22 +4661,22 @@ var Expr = Sizzle.selectors = {
|
|||
if ( first === 1 && last === 0 ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
doneName = match[0];
|
||||
parent = elem.parentNode;
|
||||
|
||||
|
||||
if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
|
||||
count = 0;
|
||||
|
||||
|
||||
for ( node = parent.firstChild; node; node = node.nextSibling ) {
|
||||
if ( node.nodeType === 1 ) {
|
||||
node.nodeIndex = ++count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
parent[ expando ] = doneName;
|
||||
}
|
||||
|
||||
|
||||
diff = elem.nodeIndex - last;
|
||||
|
||||
if ( first === 0 ) {
|
||||
|
@ -4695,7 +4695,7 @@ var Expr = Sizzle.selectors = {
|
|||
TAG: function( elem, match ) {
|
||||
return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
|
||||
},
|
||||
|
||||
|
||||
CLASS: function( elem, match ) {
|
||||
return (" " + (elem.className || elem.getAttribute("class")) + " ")
|
||||
.indexOf( match ) > -1;
|
||||
|
@ -4765,7 +4765,7 @@ var makeArray = function( array, results ) {
|
|||
results.push.apply( results, array );
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
return array;
|
||||
};
|
||||
|
||||
|
@ -4997,7 +4997,7 @@ if ( document.querySelectorAll ) {
|
|||
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Sizzle = function( query, context, extra, seed ) {
|
||||
context = context || document;
|
||||
|
||||
|
@ -5006,24 +5006,24 @@ if ( document.querySelectorAll ) {
|
|||
if ( !seed && !Sizzle.isXML(context) ) {
|
||||
// See if we find a selector to speed up
|
||||
var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
|
||||
|
||||
|
||||
if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
|
||||
// Speed-up: Sizzle("TAG")
|
||||
if ( match[1] ) {
|
||||
return makeArray( context.getElementsByTagName( query ), extra );
|
||||
|
||||
|
||||
// Speed-up: Sizzle(".CLASS")
|
||||
} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
|
||||
return makeArray( context.getElementsByClassName( match[2] ), extra );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( context.nodeType === 9 ) {
|
||||
// Speed-up: Sizzle("body")
|
||||
// The body element only exists once, optimize finding it
|
||||
if ( query === "body" && context.body ) {
|
||||
return makeArray( [ context.body ], extra );
|
||||
|
||||
|
||||
// Speed-up: Sizzle("#ID")
|
||||
} else if ( match && match[3] ) {
|
||||
var elem = context.getElementById( match[3] );
|
||||
|
@ -5036,12 +5036,12 @@ if ( document.querySelectorAll ) {
|
|||
if ( elem.id === match[3] ) {
|
||||
return makeArray( [ elem ], extra );
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
return makeArray( [], extra );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
return makeArray( context.querySelectorAll(query), extra );
|
||||
} catch(qsaError) {}
|
||||
|
@ -5079,7 +5079,7 @@ if ( document.querySelectorAll ) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return oldSizzle(query, context, extra, seed);
|
||||
};
|
||||
|
||||
|
@ -5106,7 +5106,7 @@ if ( document.querySelectorAll ) {
|
|||
// This should fail with an exception
|
||||
// Gecko does not error, returns false instead
|
||||
matches.call( document.documentElement, "[test!='']:sizzle" );
|
||||
|
||||
|
||||
} catch( pseudoError ) {
|
||||
pseudoWorks = true;
|
||||
}
|
||||
|
@ -5116,7 +5116,7 @@ if ( document.querySelectorAll ) {
|
|||
expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
|
||||
|
||||
if ( !Sizzle.isXML( node ) ) {
|
||||
try {
|
||||
try {
|
||||
if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
|
||||
var ret = matches.call( node, expr );
|
||||
|
||||
|
@ -5153,7 +5153,7 @@ if ( document.querySelectorAll ) {
|
|||
if ( div.getElementsByClassName("e").length === 1 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Expr.order.splice(1, 0, "CLASS");
|
||||
Expr.find.CLASS = function( match, context, isXML ) {
|
||||
if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
|
||||
|
@ -5204,7 +5204,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
|
|||
|
||||
if ( elem ) {
|
||||
var match = false;
|
||||
|
||||
|
||||
elem = elem[dir];
|
||||
|
||||
while ( elem ) {
|
||||
|
@ -5257,7 +5257,7 @@ if ( document.documentElement.contains ) {
|
|||
|
||||
Sizzle.isXML = function( elem ) {
|
||||
// documentElement is verified for cases where it doesn't yet exist
|
||||
// (such as loading iframes in IE - #4833)
|
||||
// (such as loading iframes in IE - #4833)
|
||||
var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
|
||||
|
||||
return documentElement ? documentElement.nodeName !== "HTML" : false;
|
||||
|
@ -5374,11 +5374,11 @@ jQuery.fn.extend({
|
|||
},
|
||||
|
||||
is: function( selector ) {
|
||||
return !!selector && (
|
||||
return !!selector && (
|
||||
typeof selector === "string" ?
|
||||
// If this is a positional selector, check membership in the returned set
|
||||
// so $("p:first").is("p:last") won't return true for a doc with two "p".
|
||||
POS.test( selector ) ?
|
||||
POS.test( selector ) ?
|
||||
jQuery( selector, this.context ).index( this[0] ) >= 0 :
|
||||
jQuery.filter( selector, this ).length > 0 :
|
||||
this.filter( selector ).length > 0 );
|
||||
|
@ -5386,7 +5386,7 @@ jQuery.fn.extend({
|
|||
|
||||
closest: function( selectors, context ) {
|
||||
var ret = [], i, l, cur = this[0];
|
||||
|
||||
|
||||
// Array (deprecated as of jQuery 1.7)
|
||||
if ( jQuery.isArray( selectors ) ) {
|
||||
var level = 1;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -74,10 +74,10 @@ linestylefilter.getLineStyleFilter = function(lineLength, aline, textAndClassFun
|
|||
{
|
||||
var classes = '';
|
||||
var isLineAttribMarker = false;
|
||||
|
||||
|
||||
Changeset.eachAttribNumber(attribs, function(n)
|
||||
{
|
||||
var key = apool.getAttribKey(n);
|
||||
var key = apool.getAttribKey(n);
|
||||
if (key)
|
||||
{
|
||||
var value = apool.getAttribValue(n);
|
||||
|
@ -109,11 +109,11 @@ linestylefilter.getLineStyleFilter = function(lineLength, aline, textAndClassFun
|
|||
key: key,
|
||||
value: value
|
||||
}, " ", " ", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if(isLineAttribMarker) classes += ' ' + lineAttributeMarker;
|
||||
return classes.substring(1);
|
||||
}
|
||||
|
@ -146,12 +146,12 @@ linestylefilter.getLineStyleFilter = function(lineLength, aline, textAndClassFun
|
|||
|
||||
return function(txt, cls)
|
||||
{
|
||||
|
||||
|
||||
var disableAuthColorForThisLine = hooks.callAll("disableAuthorColorsForThisLine", {
|
||||
linestylefilter: linestylefilter,
|
||||
text: txt,
|
||||
"class": cls
|
||||
}, " ", " ", "");
|
||||
}, " ", " ", "");
|
||||
var disableAuthors = (disableAuthColorForThisLine==null||disableAuthColorForThisLine.length==0)?false:disableAuthColorForThisLine[0];
|
||||
while (txt.length > 0)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -60,10 +60,10 @@ function createCookie(name, value, days, path)
|
|||
var expires = "; expires=" + date.toGMTString();
|
||||
}
|
||||
else var expires = "";
|
||||
|
||||
|
||||
if(!path)
|
||||
path = "/";
|
||||
|
||||
|
||||
document.cookie = name + "=" + value + expires + "; path=" + path;
|
||||
}
|
||||
|
||||
|
@ -117,7 +117,7 @@ function getParams()
|
|||
if(showControls)
|
||||
{
|
||||
if(showControls == "false")
|
||||
{
|
||||
{
|
||||
$('#editbar').hide();
|
||||
$('#editorcontainer').css({"top":"0px"});
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ function handshake()
|
|||
token = "t." + randomString();
|
||||
createCookie("token", token, 60);
|
||||
}
|
||||
|
||||
|
||||
var sessionID = readCookie("sessionID");
|
||||
var password = readCookie("password");
|
||||
|
||||
|
@ -233,14 +233,14 @@ function handshake()
|
|||
"token": token,
|
||||
"protocolVersion": 2
|
||||
};
|
||||
|
||||
|
||||
//this is a reconnect, lets tell the server our revisionnumber
|
||||
if(isReconnect == true)
|
||||
{
|
||||
msg.client_rev=pad.collabClient.getCurrentRevisionNumber();
|
||||
msg.reconnect=true;
|
||||
}
|
||||
|
||||
|
||||
socket.json.send(msg);
|
||||
};
|
||||
|
||||
|
@ -249,7 +249,7 @@ function handshake()
|
|||
socket.once('connect', function () {
|
||||
sendClientReady(false);
|
||||
});
|
||||
|
||||
|
||||
socket.on('reconnect', function () {
|
||||
//reconnect is before the timeout, lets stop the timeout
|
||||
if(disconnectTimeout)
|
||||
|
@ -260,7 +260,7 @@ function handshake()
|
|||
pad.collabClient.setChannelState("CONNECTED");
|
||||
sendClientReady(true);
|
||||
});
|
||||
|
||||
|
||||
socket.on('disconnect', function (reason) {
|
||||
if(reason == "booted"){
|
||||
pad.collabClient.setChannelState("DISCONNECTED");
|
||||
|
@ -269,9 +269,9 @@ function handshake()
|
|||
{
|
||||
pad.collabClient.setChannelState("DISCONNECTED", "reconnect_timeout");
|
||||
}
|
||||
|
||||
|
||||
pad.collabClient.setChannelState("RECONNECTING");
|
||||
|
||||
|
||||
disconnectTimeout = setTimeout(disconnectEvent, 10000);
|
||||
}
|
||||
});
|
||||
|
@ -301,7 +301,7 @@ function handshake()
|
|||
"<button type='button' onclick=\"" + padutils.escapeHtml('require('+JSON.stringify(module.id)+").savePassword()") + "\">ok</button>");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//if we haven't recieved the clientVars yet, then this message should it be
|
||||
else if (!receivedClientVars)
|
||||
{
|
||||
|
@ -314,7 +314,7 @@ function handshake()
|
|||
clientVars = obj.data;
|
||||
clientVars.userAgent = "Anonymous";
|
||||
clientVars.collab_client_vars.clientAgent = "Anonymous";
|
||||
|
||||
|
||||
//initalize the pad
|
||||
pad._afterHandshake();
|
||||
initalized = true;
|
||||
|
@ -336,7 +336,7 @@ function handshake()
|
|||
{
|
||||
pad.changeViewOption('noColors', true);
|
||||
}
|
||||
|
||||
|
||||
if (settings.rtlIsTrue == true)
|
||||
{
|
||||
pad.changeViewOption('rtl', true);
|
||||
|
@ -457,7 +457,7 @@ var pad = {
|
|||
_afterHandshake: function()
|
||||
{
|
||||
pad.clientTimeOffset = new Date().getTime() - clientVars.serverTimestamp;
|
||||
|
||||
|
||||
//initialize the chat
|
||||
chat.init(this);
|
||||
pad.initTime = +(new Date());
|
||||
|
@ -481,7 +481,7 @@ var pad = {
|
|||
|
||||
// order of inits is important here:
|
||||
padcookie.init(clientVars.cookiePrefsToSet, this);
|
||||
|
||||
|
||||
$("#widthprefcheck").click(pad.toggleWidthPref);
|
||||
// $("#sidebarcheck").click(pad.togglewSidebar);
|
||||
|
||||
|
@ -749,20 +749,20 @@ var pad = {
|
|||
pad.diagnosticInfo.disconnectedMessage = message;
|
||||
pad.diagnosticInfo.padId = pad.getPadId();
|
||||
pad.diagnosticInfo.socket = {};
|
||||
|
||||
//we filter non objects from the socket object and put them in the diagnosticInfo
|
||||
|
||||
//we filter non objects from the socket object and put them in the diagnosticInfo
|
||||
//this ensures we have no cyclic data - this allows us to stringify the data
|
||||
for(var i in socket.socket)
|
||||
{
|
||||
var value = socket.socket[i];
|
||||
var type = typeof value;
|
||||
|
||||
|
||||
if(type == "string" || type == "number")
|
||||
{
|
||||
pad.diagnosticInfo.socket[i] = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pad.asyncSendDiagnosticInfo();
|
||||
if (typeof window.ajlog == "string")
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -43,7 +43,7 @@ var padconnectionstatus = (function()
|
|||
status = {
|
||||
what: 'connected'
|
||||
};
|
||||
|
||||
|
||||
padmodals.showModal('connected');
|
||||
padmodals.hideOverlay(500);
|
||||
},
|
||||
|
@ -52,7 +52,7 @@ var padconnectionstatus = (function()
|
|||
status = {
|
||||
what: 'reconnecting'
|
||||
};
|
||||
|
||||
|
||||
padmodals.showModal('reconnecting');
|
||||
padmodals.showOverlay(500);
|
||||
},
|
||||
|
@ -60,18 +60,18 @@ var padconnectionstatus = (function()
|
|||
{
|
||||
if(status.what == "disconnected")
|
||||
return;
|
||||
|
||||
|
||||
status = {
|
||||
what: 'disconnected',
|
||||
why: msg
|
||||
};
|
||||
|
||||
|
||||
var k = String(msg).toLowerCase(); // known reason why
|
||||
if (!(k == 'userdup' || k == 'deleted' || k == 'looping' || k == 'slowcommit' || k == 'initsocketfail' || k == 'unauth'))
|
||||
{
|
||||
k = 'disconnected';
|
||||
}
|
||||
|
||||
|
||||
padmodals.showModal(k);
|
||||
padmodals.showOverlay(500);
|
||||
},
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -117,7 +117,7 @@ var padeditbar = (function()
|
|||
$("#editbar").addClass('disabledtoolbar').removeClass("enabledtoolbar");
|
||||
},
|
||||
toolbarClick: function(cmd)
|
||||
{
|
||||
{
|
||||
if (self.isEnabled())
|
||||
{
|
||||
if(cmd == "showusers")
|
||||
|
@ -189,7 +189,7 @@ var padeditbar = (function()
|
|||
toggleDropDown: function(moduleName, cb)
|
||||
{
|
||||
var modules = ["settings", "connectivity", "importexport", "embed", "users"];
|
||||
|
||||
|
||||
// hide all modules and remove highlighting of all buttons
|
||||
if(moduleName == "none")
|
||||
{
|
||||
|
@ -199,9 +199,9 @@ var padeditbar = (function()
|
|||
//skip the userlist
|
||||
if(modules[i] == "users")
|
||||
continue;
|
||||
|
||||
|
||||
var module = $("#" + modules[i]);
|
||||
|
||||
|
||||
if(module.css('display') != "none")
|
||||
{
|
||||
$("#" + modules[i] + "link").removeClass("selected");
|
||||
|
@ -211,14 +211,14 @@ var padeditbar = (function()
|
|||
}
|
||||
if(!returned && cb) return cb();
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
// hide all modules that are not selected and remove highlighting
|
||||
// respectively add highlighting to the corresponding button
|
||||
for(var i=0;i<modules.length;i++)
|
||||
{
|
||||
var module = $("#" + modules[i]);
|
||||
|
||||
|
||||
if(module.css('display') != "none")
|
||||
{
|
||||
$("#" + modules[i] + "link").removeClass("selected");
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -71,7 +71,7 @@ var padimpexp = (function()
|
|||
$('#importmessagefail').fadeOut("fast");
|
||||
var ret = window.confirm("Importing a file will overwrite the current text of the pad." + " Are you sure you want to proceed?");
|
||||
if (ret)
|
||||
{
|
||||
{
|
||||
hidePanelCall = paddocbar.hideLaterIfNoOtherInteraction();
|
||||
currentImportTimer = window.setTimeout(function()
|
||||
{
|
||||
|
@ -128,13 +128,13 @@ var padimpexp = (function()
|
|||
function importErrorMessage(status)
|
||||
{
|
||||
var msg="";
|
||||
|
||||
|
||||
if(status === "convertFailed"){
|
||||
msg = "We were not able to import this file. Please use a different document format or copy paste manually";
|
||||
} else if(status === "uploadFailed"){
|
||||
msg = "The upload failed, please try again";
|
||||
}
|
||||
|
||||
|
||||
function showError(fade)
|
||||
{
|
||||
$('#importmessagefail').html('<strong style="color: red">Import failed:</strong> ' + (msg || 'Please copy paste'))[(fade ? "fadeIn" : "show")]();
|
||||
|
@ -218,7 +218,7 @@ var padimpexp = (function()
|
|||
$("#exporthtmla").attr("href", pad_root_path + "/export/html");
|
||||
$("#exportplaina").attr("href", pad_root_path + "/export/txt");
|
||||
$("#exportdokuwikia").attr("href", pad_root_path + "/export/dokuwiki");
|
||||
|
||||
|
||||
//hide stuff thats not avaible if abiword is disabled
|
||||
if(clientVars.abiwordAvailable == "no")
|
||||
{
|
||||
|
@ -231,24 +231,24 @@ var padimpexp = (function()
|
|||
else if(clientVars.abiwordAvailable == "withoutPDF")
|
||||
{
|
||||
$("#exportpdfa").remove();
|
||||
|
||||
|
||||
$("#exportworda").attr("href", pad_root_path + "/export/doc");
|
||||
$("#exportopena").attr("href", pad_root_path + "/export/odt");
|
||||
|
||||
|
||||
$("#importexport").css({"height":"142px"});
|
||||
$("#importexportline").css({"height":"142px"});
|
||||
|
||||
$("#importform").attr('action', pad_root_url + "/import");
|
||||
|
||||
$("#importform").attr('action', pad_root_url + "/import");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#exportworda").attr("href", pad_root_path + "/export/doc");
|
||||
$("#exportpdfa").attr("href", pad_root_path + "/export/pdf");
|
||||
$("#exportopena").attr("href", pad_root_path + "/export/odt");
|
||||
|
||||
$("#importform").attr('action', pad_root_path + "/import");
|
||||
|
||||
$("#importform").attr('action', pad_root_path + "/import");
|
||||
}
|
||||
|
||||
|
||||
$("#impexp-close").click(function()
|
||||
{
|
||||
paddocbar.setShownPanel(null);
|
||||
|
@ -265,7 +265,7 @@ var padimpexp = (function()
|
|||
{
|
||||
importFailed(status);
|
||||
}
|
||||
|
||||
|
||||
importDone();
|
||||
},
|
||||
disable: function()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -19,7 +19,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
var padutils = require('./pad_utils').padutils;
|
||||
var padeditbar = require('./pad_editbar').padeditbar;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -516,7 +516,7 @@ var paduserlist = (function()
|
|||
{
|
||||
info.colorId = clientVars.colorPalette[info.colorId];
|
||||
}
|
||||
|
||||
|
||||
myUserInfo = $.extend(
|
||||
{}, info);
|
||||
|
||||
|
@ -725,9 +725,9 @@ var paduserlist = (function()
|
|||
{
|
||||
$("#myswatchbox").addClass('myswatchboxhoverable').removeClass('myswatchboxunhoverable');
|
||||
}
|
||||
|
||||
|
||||
$("#myswatch").css({'background-color': myUserInfo.colorId});
|
||||
|
||||
|
||||
if ($.browser.msie && parseInt($.browser.version) <= 8) {
|
||||
$("#usericon a").css({'box-shadow': 'inset 0 0 30px ' + myUserInfo.colorId,'background-color': myUserInfo.colorId});
|
||||
}
|
||||
|
@ -749,7 +749,7 @@ function getColorPickerSwatchIndex(jnode)
|
|||
function closeColorPicker(accept)
|
||||
{
|
||||
if (accept)
|
||||
{
|
||||
{
|
||||
var newColor = $("#mycolorpickerpreview").css("background-color");
|
||||
var parts = newColor.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
|
||||
// parts now should be ["rgb(0, 70, 255", "0", "70", "255"]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -518,9 +518,9 @@ function setupGlobalExceptionHandler() {
|
|||
var errObj = {errorInfo: JSON.stringify({errorId: errorId, msg: msg, url: url, linenumber: linenumber, userAgent: navigator.userAgent})};
|
||||
var loc = document.location;
|
||||
var url = loc.protocol + "//" + loc.hostname + ":" + loc.port + "/" + loc.pathname.substr(1, loc.pathname.indexOf("/p/")) + "jserror";
|
||||
|
||||
|
||||
$.post(url, errObj);
|
||||
|
||||
|
||||
return false;
|
||||
};
|
||||
window.onerror = globalExceptionHandler;
|
||||
|
|
|
@ -43,7 +43,7 @@ exports.uninstall = function(plugin_name, cb) {
|
|||
});
|
||||
},
|
||||
function () {
|
||||
hooks.aCallAll("restartServer", {}, function () {});
|
||||
hooks.aCallAll("restartServer", {}, function () {});
|
||||
},
|
||||
cb
|
||||
);
|
||||
|
@ -61,7 +61,7 @@ exports.install = function(plugin_name, cb) {
|
|||
});
|
||||
},
|
||||
function () {
|
||||
hooks.aCallAll("restartServer", {}, function () {});
|
||||
hooks.aCallAll("restartServer", {}, function () {});
|
||||
},
|
||||
cb
|
||||
);
|
||||
|
|
|
@ -105,11 +105,11 @@ exports.getPackages = function (cb) {
|
|||
delete packages[name].dependencies;
|
||||
delete packages[name].parent;
|
||||
}
|
||||
|
||||
|
||||
if (deps[name].dependencies !== undefined) flatten(deps[name].dependencies);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
var tmp = {};
|
||||
tmp[data.name] = data;
|
||||
flatten(tmp);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
@ -155,7 +155,7 @@ function SkipList()
|
|||
var widthLoc = point.widthSkips[0] + point.nodes[0].downSkipWidths[0];
|
||||
var newWidth = _entryWidth(entry);
|
||||
p.mark("loop1");
|
||||
|
||||
|
||||
// The new node will have at least level 1
|
||||
// With a proability of 0.01^(n-1) the nodes level will be >= n
|
||||
while (newNode.levels == 0 || Math.random() < 0.01)
|
||||
|
|
|
@ -60,7 +60,7 @@ function init() {
|
|||
var url = loc.protocol + "//" + loc.hostname + ":" + port + "/";
|
||||
//find out in which subfolder we are
|
||||
var resource = exports.baseURL.substring(1) + 'socket.io';
|
||||
|
||||
|
||||
//build up the socket io connection
|
||||
socket = io.connect(url, {resource: resource});
|
||||
|
||||
|
@ -128,13 +128,13 @@ function sendSocketMsg(type, data)
|
|||
}
|
||||
|
||||
var fireWhenAllScriptsAreLoaded = [];
|
||||
|
||||
|
||||
var BroadcastSlider, changesetLoader;
|
||||
function handleClientVars(message)
|
||||
{
|
||||
//save the client Vars
|
||||
clientVars = message.data;
|
||||
|
||||
|
||||
//load all script that doesn't work without the clientVars
|
||||
BroadcastSlider = require('./broadcast_slider').loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded);
|
||||
require('./broadcast_revisions').loadBroadcastRevisionsJS();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
||||
* This helps other people to understand this code better and helps them to improve it.
|
||||
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue