aboutsummaryrefslogblamecommitdiffstats
path: root/etherpad/src/etherpad/pad/padutils.js
blob: 3ffe70cbe880ef2fd3a6d01359001a4f8c7371a4 (plain) (tree)


































































































                                                                           
                                       





















































                                                      
/**
 * Copyright 2009 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import("fastJSON");
import("stringutils");

import("etherpad.control.pro.account_control");

import("etherpad.pro.pro_utils");
import("etherpad.pro.domains");
import("etherpad.pro.pro_accounts");
import("etherpad.pro.pro_padmeta");
import("etherpad.pad.model");
import("etherpad.sessions.getSession");

jimport("java.lang.System.out.println");


function setCurrentPad(p) {
  appjet.context.attributes().update("currentPadId", p);
}

function clearCurrentPad() {
  appjet.context.attributes()['$minus$eq']("currentPadId");
}

function getCurrentPad() {
  var padOpt = appjet.context.attributes().get("currentPadId");
  if (padOpt.isEmpty()) return null;
  return padOpt.get();
}

function _parseCookie(text) {
  try {
    var cookieData = fastJSON.parse(unescape(text));
    return cookieData;
  }
  catch (e) {
    return null;
  }
}

function getPrefsCookieData() {
  var prefsCookie = request.cookies['prefs'];
  if (!prefsCookie) {
    return null;
  }

  return _parseCookie(prefsCookie);
}

function getPrefsCookieUserId() {
  var cookieData = getPrefsCookieData();
  if (! cookieData) {
    return null;
  }
  return cookieData.userId || null;
}

/**
 * Not valid to call this function outisde a HTTP request.
 */
function accessPadLocal(localPadId, fn, rwMode) {
  if (!request.isDefined) {
    throw Error("accessPadLocal() cannot run outside an HTTP request.");
  }
  var globalPadId = getGlobalPadId(localPadId);
  var fnwrap = function(pad) {
    pad.getLocalId = function() {
      return getLocalPadId(pad);
    };
    return fn(pad);
  }
  return model.accessPadGlobal(globalPadId, fnwrap, rwMode);
}

/**
 * Not valid to call this function outisde a HTTP request.
 */
function getGlobalPadId(localPadId) {
  if (!request.isDefined) {
    throw Error("getGlobalPadId() cannot run outside an HTTP request.");
  }
  if (pro_utils.isProDomainRequest()) {
    return makeGlobalId(domains.getRequestDomainId(), localPadId);
  } else {
    // pad.spline.inf.fu-berlin.de pads
    return localPadId;
  }
}

function makeGlobalId(domainId, localPadId) {
  return [domainId, localPadId].map(String).join('$');
}

function globalToLocalId(globalId) {
  var parts = globalId.split('$');
  if (parts.length == 1) {
    return parts[0];
  } else {
    return parts[1];
  }
}

function getLocalPadId(pad) {
  var globalId = pad.getId();
  return globalToLocalId(globalId);
}

function isProPadId(globalPadId) {
  return (globalPadId.indexOf("$") > 0);
}

function isProPad(pad) {
  return isProPadId(pad.getId());
}

function getDomainId(globalPadId) {
  var parts = globalPadId.split("$");
  if (parts.length < 2) {
    return null;
  } else {
    return Number(parts[0]);
  }
}

function makeValidLocalPadId(str) {
  return str.replace(/[^a-zA-Z0-9\-]/g, '-');
}

function getProDisplayTitle(localPadId, title) {
  if (title) {
    return title;
  }
  if (stringutils.isNumeric(localPadId)) {
    return ("Untitled "+localPadId);
  } else {
    return (localPadId);
  }
}