Stackedit/js/core.js

581 lines
18 KiB
JavaScript
Raw Normal View History

2013-05-26 22:59:03 +00:00
define([
"jquery",
"utils",
"extension-manager",
"bootstrap",
"layout",
"Markdown.Editor",
"storage",
"config",
"underscore",
"FileSaver",
"css_browser_selector"
], function($, utils, extensionManager) {
2013-04-02 18:42:47 +00:00
var core = {};
2013-05-18 13:40:16 +00:00
// For convenience
2013-04-10 18:14:59 +00:00
core.doNothing = function() {};
2013-04-02 18:42:47 +00:00
// Time shared by others modules
2013-04-10 18:14:59 +00:00
function updateCurrentTime() {
2013-04-02 18:42:47 +00:00
core.currentTime = new Date().getTime();
2013-04-10 18:14:59 +00:00
}
2013-05-18 13:40:16 +00:00
updateCurrentTime();
2013-04-02 18:42:47 +00:00
2013-04-21 00:07:27 +00:00
// Used for periodic tasks
var intervalId = undefined;
var periodicCallbacks = [];
core.addPeriodicCallback = function(callback) {
periodicCallbacks.push(callback);
};
2013-04-10 18:14:59 +00:00
// Used to detect user activity
var userReal = false;
var userActive = false;
var windowUnique = true;
var userLastActivity = 0;
function setUserActive() {
userReal = true;
userActive = true;
userLastActivity = core.currentTime;
};
function isUserActive() {
if(userActive === true
&& core.currentTime - userLastActivity > USER_IDLE_THRESHOLD) {
userActive = false;
}
return userActive && windowUnique;
}
2013-04-03 22:52:29 +00:00
2013-04-10 18:14:59 +00:00
// Used to only have 1 window of the application in the same browser
var windowId = undefined;
core.checkWindowUnique = function() {
if(userReal === false || windowUnique === false) {
return;
}
if(windowId === undefined) {
2013-05-25 18:13:59 +00:00
windowId = utils.randomString();
2013-04-10 18:14:59 +00:00
localStorage["frontWindowId"] = windowId;
}
var frontWindowId = localStorage["frontWindowId"];
if(frontWindowId != windowId) {
windowUnique = false;
2013-04-11 22:38:41 +00:00
if(intervalId !== undefined) {
clearInterval(intervalId);
}
2013-04-10 23:13:31 +00:00
$(".modal").modal("hide");
2013-04-10 18:14:59 +00:00
$('#modal-non-unique').modal({
backdrop: "static",
keyboard: false
});
}
};
2013-04-22 23:10:08 +00:00
2013-05-25 00:34:04 +00:00
// Export data on disk
2013-04-22 23:10:08 +00:00
core.saveFile = function(content, filename) {
if(saveAs !== undefined) {
var blob = new Blob([content], {type: "text/plain;charset=utf-8"});
saveAs(blob, filename);
}
else {
var uriContent = "data:application/octet-stream;base64,"
2013-05-25 18:13:59 +00:00
+ utils.encodeBase64(content);
2013-04-22 23:10:08 +00:00
window.open(uriContent, 'file');
}
};
2013-04-02 18:42:47 +00:00
2013-04-20 00:14:20 +00:00
// Used by asyncRunner
2013-04-02 18:42:47 +00:00
core.showWorkingIndicator = function(show) {
if (show === false) {
2013-04-27 23:16:38 +00:00
$(".working-indicator").removeClass("show");
2013-04-03 22:52:29 +00:00
$("body").removeClass("working");
2013-04-02 18:42:47 +00:00
} else {
2013-04-27 23:16:38 +00:00
$(".working-indicator").addClass("show");
2013-04-03 22:52:29 +00:00
$("body").addClass("working");
2013-04-02 18:42:47 +00:00
}
};
2013-05-25 00:34:04 +00:00
// Log a message
core.showMessage = function(message) {
console.log(message);
extensionManager.onMessage(message);
2013-04-02 18:42:47 +00:00
};
2013-05-25 00:34:04 +00:00
// Log an error
core.showError = function(error) {
console.error(error);
if(_.isString(error)) {
extensionManager.onMessage(error);
}
else if(_.isObject(error)) {
extensionManager.onMessage(error.message);
}
2013-04-02 18:42:47 +00:00
};
// Offline management
core.isOffline = false;
var offlineTime = core.currentTime;
var offlineListeners = [];
2013-04-21 00:07:27 +00:00
core.addOfflineListener = function(callback) {
offlineListeners.push(callback);
};
2013-04-02 18:42:47 +00:00
core.setOffline = function() {
offlineTime = core.currentTime;
if(core.isOffline === false) {
core.isOffline = true;
2013-05-25 00:34:04 +00:00
extensionManager.onOfflineChanged(true);
_.each(offlineListeners, function(listener) {
listener();
2013-04-02 18:42:47 +00:00
});
}
};
core.setOnline = function() {
2013-04-03 22:52:29 +00:00
if(core.isOffline === true) {
2013-04-02 18:42:47 +00:00
core.isOffline = false;
2013-05-25 00:34:04 +00:00
extensionManager.onOfflineChanged(false);
_.each(offlineListeners, function(listener) {
listener();
});
2013-04-02 18:42:47 +00:00
}
};
2013-04-10 18:14:59 +00:00
function checkOnline() {
2013-04-02 18:42:47 +00:00
// Try to reconnect if we are offline but we have some network
if (core.isOffline === true && navigator.onLine === true
&& offlineTime + CHECK_ONLINE_PERIOD < core.currentTime) {
offlineTime = core.currentTime;
// Try to download anything to test the connection
$.ajax({
2013-04-05 23:59:59 +00:00
url : "//www.google.com/jsapi",
2013-04-02 18:42:47 +00:00
timeout : AJAX_TIMEOUT, dataType : "script"
}).done(function() {
core.setOnline();
});
}
2013-04-10 18:14:59 +00:00
}
2013-04-02 18:42:47 +00:00
// Setting management
2013-04-11 22:38:41 +00:00
core.settings = {
2013-04-10 23:13:31 +00:00
layoutOrientation : "horizontal",
2013-05-25 18:13:59 +00:00
lazyRendering : true,
2013-04-11 22:38:41 +00:00
editorFontSize : 14,
2013-04-29 21:41:10 +00:00
defaultContent: "\n\n\n> Written with [StackEdit](http://benweet.github.io/stackedit/).",
commitMsg : "Published by http://benweet.github.io/stackedit",
2013-04-14 13:24:29 +00:00
template : ['<!DOCTYPE html>\n',
'<html>\n',
'<head>\n',
'<title><%= documentTitle %></title>\n',
'</head>\n',
'<body><%= documentHTML %></body>\n',
2013-05-19 18:56:15 +00:00
'</html>'].join(""),
2013-05-26 22:59:03 +00:00
sshProxy : SSH_PROXY_URL,
extensionSettings: {}
2013-04-10 23:13:31 +00:00
};
2013-05-25 18:13:59 +00:00
if (_.has(localStorage, "settings")) {
_.extend(core.settings, JSON.parse(localStorage.settings));
}
2013-05-26 22:59:03 +00:00
extensionManager.init(core.settings.extensionSettings);
2013-04-02 18:42:47 +00:00
2013-05-25 18:13:59 +00:00
core.loadSettings = function() {
2013-04-02 18:42:47 +00:00
// Layout orientation
2013-05-25 18:13:59 +00:00
utils.setInputRadio("radio-layout-orientation", core.settings.layoutOrientation);
2013-05-21 22:34:42 +00:00
// Theme
2013-05-25 18:13:59 +00:00
utils.setInputValue("#input-settings-theme", localStorage.theme);
2013-05-13 23:10:02 +00:00
// Lazy rendering
2013-05-25 18:13:59 +00:00
utils.setInputChecked("#input-settings-lazy-rendering", core.settings.lazyRendering);
2013-04-10 23:13:31 +00:00
// Editor font size
2013-05-25 18:13:59 +00:00
utils.setInputValue("#input-settings-editor-font-size", core.settings.editorFontSize);
2013-04-29 21:41:10 +00:00
// Default content
2013-05-25 18:13:59 +00:00
utils.setInputValue("#textarea-settings-default-content", core.settings.defaultContent);
2013-04-11 22:38:41 +00:00
// Commit message
2013-05-25 18:13:59 +00:00
utils.setInputValue("#input-settings-publish-commit-msg", core.settings.commitMsg);
2013-04-14 13:24:29 +00:00
// Template
2013-05-25 18:13:59 +00:00
utils.setInputValue("#textarea-settings-publish-template", core.settings.template);
2013-05-19 18:56:15 +00:00
// SSH proxy
2013-05-25 18:13:59 +00:00
utils.setInputValue("#input-settings-ssh-proxy", core.settings.sshProxy);
// Load extension settings
extensionManager.onLoadSettings();
2013-04-02 18:42:47 +00:00
};
2013-04-10 23:13:31 +00:00
core.saveSettings = function(event) {
var newSettings = {};
2013-04-02 18:42:47 +00:00
// Layout orientation
2013-05-25 18:13:59 +00:00
newSettings.layoutOrientation = utils.getInputRadio("radio-layout-orientation");
2013-05-21 22:34:42 +00:00
// Theme
2013-05-25 18:13:59 +00:00
var theme = utils.getInputValue("#input-settings-theme");
2013-05-13 23:10:02 +00:00
// Lazy Rendering
2013-05-25 18:13:59 +00:00
newSettings.lazyRendering = utils.getInputChecked("#input-settings-lazy-rendering");
2013-04-10 23:13:31 +00:00
// Editor font size
2013-05-25 18:13:59 +00:00
newSettings.editorFontSize = utils.getInputIntValue("#input-settings-editor-font-size", event, 1, 99);
2013-04-29 21:41:10 +00:00
// Default content
2013-05-25 18:13:59 +00:00
newSettings.defaultContent = utils.getInputValue("#textarea-settings-default-content");
2013-04-11 22:38:41 +00:00
// Commit message
2013-05-25 18:13:59 +00:00
newSettings.commitMsg = utils.getInputTextValue("#input-settings-publish-commit-msg", event);
2013-04-14 13:24:29 +00:00
// Template
2013-05-25 18:13:59 +00:00
newSettings.template = utils.getInputTextValue("#textarea-settings-publish-template", event);
2013-05-19 18:56:15 +00:00
// SSH proxy
2013-05-25 18:13:59 +00:00
newSettings.sshProxy = utils.checkUrl(utils.getInputTextValue("#input-settings-ssh-proxy", event), true);
// Save extension settings
newSettings.extensionSettings = {};
extensionManager.onSaveSettings(newSettings.extensionSettings, event);
2013-04-14 13:24:29 +00:00
2013-04-10 23:13:31 +00:00
if(!event.isPropagationStopped()) {
2013-05-19 18:56:15 +00:00
$.extend(core.settings, newSettings);
2013-04-10 23:13:31 +00:00
localStorage.settings = JSON.stringify(newSettings);
2013-05-21 22:34:42 +00:00
localStorage.theme = theme;
2013-04-10 23:13:31 +00:00
}
2013-04-02 18:42:47 +00:00
};
2013-04-14 13:24:29 +00:00
2013-04-02 18:42:47 +00:00
// Create the layout
2013-04-27 12:25:02 +00:00
var layout = undefined;
2013-04-02 18:42:47 +00:00
core.createLayout = function() {
2013-04-30 23:02:19 +00:00
if(viewerMode === true) {
return;
}
2013-04-02 18:42:47 +00:00
var layoutGlobalConfig = {
closable : true,
resizable : false,
slidable : false,
livePaneResizing : true,
enableCursorHotkey : false,
spacing_open : 15,
spacing_closed : 15,
togglerLength_open : 90,
togglerLength_closed : 90,
2013-04-30 23:02:19 +00:00
stateManagement__enabled : false,
center__minWidth : 200,
center__minHeight : 200
2013-04-02 18:42:47 +00:00
};
2013-05-25 00:34:04 +00:00
extensionManager.onLayoutConfigure(layoutGlobalConfig);
2013-04-11 22:38:41 +00:00
if (core.settings.layoutOrientation == "horizontal") {
2013-04-02 18:42:47 +00:00
$(".ui-layout-south").remove();
$(".ui-layout-east").addClass("well").prop("id", "wmd-preview");
layout = $('body').layout(
$.extend(layoutGlobalConfig, {
east__resizable : true,
east__size : .5,
east__minSize : 200
})
);
2013-04-11 22:38:41 +00:00
} else if (core.settings.layoutOrientation == "vertical") {
2013-04-02 18:42:47 +00:00
$(".ui-layout-east").remove();
$(".ui-layout-south").addClass("well").prop("id", "wmd-preview");
layout = $('body').layout(
$.extend(layoutGlobalConfig, {
south__resizable : true,
south__size : .5,
south__minSize : 200
})
);
}
$(".ui-layout-toggler-north").addClass("btn").append(
$("<b>").addClass("caret"));
$(".ui-layout-toggler-south").addClass("btn").append(
$("<b>").addClass("caret"));
$(".ui-layout-toggler-east").addClass("btn").append(
$("<b>").addClass("caret"));
$("#navbar").click(function() {
layout.allowOverflow('north');
});
2013-04-26 23:08:13 +00:00
2013-05-26 22:59:03 +00:00
extensionManager.onLayoutCreated(layout);
2013-04-27 12:25:02 +00:00
};
2013-04-26 23:08:13 +00:00
2013-04-02 18:42:47 +00:00
// Create the PageDown editor
2013-04-04 22:13:48 +00:00
var insertLinkCallback = undefined;
2013-04-02 18:42:47 +00:00
core.createEditor = function(onTextChange) {
2013-04-27 00:15:21 +00:00
var converter = new Markdown.Converter();
2013-04-02 18:42:47 +00:00
var editor = new Markdown.Editor(converter);
2013-04-21 18:41:10 +00:00
// Custom insert link dialog
2013-04-04 22:13:48 +00:00
editor.hooks.set("insertLinkDialog", function (callback) {
insertLinkCallback = callback;
2013-05-26 01:10:58 +00:00
utils.resetModalInputs();
2013-04-10 23:13:31 +00:00
$("#modal-insert-link").modal();
2013-05-13 23:10:02 +00:00
_.defer(function() {
$("#input-insert-link").focus();
});
2013-04-04 22:13:48 +00:00
return true;
});
2013-04-21 18:41:10 +00:00
// Custom insert image dialog
2013-04-04 22:13:48 +00:00
editor.hooks.set("insertImageDialog", function (callback) {
insertLinkCallback = callback;
2013-05-26 01:10:58 +00:00
utils.resetModalInputs();
2013-04-10 23:13:31 +00:00
$("#modal-insert-image").modal();
2013-05-13 23:10:02 +00:00
_.defer(function() {
$("#input-insert-image").focus();
});
2013-04-04 22:13:48 +00:00
return true;
});
2013-05-25 00:34:04 +00:00
var firstChange = true;
2013-05-13 23:10:02 +00:00
var previewWrapper = function(makePreview) {
2013-05-16 00:19:58 +00:00
return function() {
if(firstChange !== true) {
onTextChange();
}
makePreview();
};
2013-05-13 23:10:02 +00:00
};
if(core.settings.lazyRendering === true) {
2013-05-26 01:10:58 +00:00
var lastRefresh = 0;
2013-05-13 23:10:02 +00:00
previewWrapper = function(makePreview) {
2013-05-26 01:10:58 +00:00
//var debouncedMakePreview = _.debounce(makePreview, 500);
return function() {
if(firstChange === true) {
makePreview();
}
else {
2013-05-16 00:19:58 +00:00
onTextChange();
2013-05-26 01:10:58 +00:00
var currentDate = new Date().getTime();
if(currentDate - lastRefresh > 500) {
makePreview();
lastRefresh = currentDate;
}
//debouncedMakePreview();
}
};
2013-05-13 23:10:02 +00:00
};
}
2013-05-25 00:34:04 +00:00
extensionManager.onEditorConfigure(editor);
editor.hooks.chain("onPreviewRefresh", extensionManager.onAsyncPreview);
// Convert email addresses (not managed by pagedown)
converter.hooks.chain("postConversion", function(text) {
return text.replace(/<(mailto\:)?([^\s>]+@[^\s>]+\.\S+?)>/g, function(match, mailto, email) {
return '<a href="mailto:' + email + '">' + email + '</a>';
});
});
$("#wmd-input, #wmd-preview").scrollTop(0);
$("#wmd-button-bar").empty();
2013-05-13 23:10:02 +00:00
editor.run(previewWrapper);
2013-04-02 18:42:47 +00:00
firstChange = false;
2013-04-21 18:41:10 +00:00
// Hide default buttons
2013-04-02 18:42:47 +00:00
$(".wmd-button-row").addClass("btn-group").find("li:not(.wmd-spacer)")
.addClass("btn").css("left", 0).find("span").hide();
2013-04-21 18:41:10 +00:00
// Add customized buttons
2013-04-02 18:42:47 +00:00
$("#wmd-bold-button").append($("<i>").addClass("icon-bold"));
$("#wmd-italic-button").append($("<i>").addClass("icon-italic"));
$("#wmd-link-button").append($("<i>").addClass("icon-globe"));
$("#wmd-quote-button").append($("<i>").addClass("icon-indent-left"));
$("#wmd-code-button").append($("<i>").addClass("icon-code"));
$("#wmd-image-button").append($("<i>").addClass("icon-picture"));
$("#wmd-olist-button").append($("<i>").addClass("icon-numbered-list"));
$("#wmd-ulist-button").append($("<i>").addClass("icon-list"));
$("#wmd-heading-button").append($("<i>").addClass("icon-text-height"));
$("#wmd-hr-button").append($("<i>").addClass("icon-hr"));
$("#wmd-undo-button").append($("<i>").addClass("icon-undo"));
$("#wmd-redo-button").append($("<i>").addClass("icon-share-alt"));
};
2013-05-04 00:05:58 +00:00
2013-04-11 22:38:41 +00:00
// Create an centered popup window
2013-04-10 23:13:31 +00:00
core.popupWindow = function(url, title, w, h) {
var left = (screen.width / 2) - (w / 2);
var top = (screen.height / 2) - (h / 2);
return window
.open(
url,
title,
'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='
+ w
+ ', height='
+ h
+ ', top='
+ top
+ ', left='
+ left);
};
2013-04-11 22:38:41 +00:00
2013-04-22 01:04:12 +00:00
// Keep a reference to the fileManager
core.setFileManager = function(fileManager) {
core.fileManager = fileManager;
runReadyCallbacks();
};
// onReady event callbacks
var readyCallbacks = [];
core.onReady = function(callback) {
readyCallbacks.push(callback);
runReadyCallbacks();
};
var documentLoaded = false;
function runReadyCallbacks() {
if(documentLoaded === true && core.fileManager !== undefined) {
_.each(readyCallbacks, function(callback) {
callback();
});
readyCallbacks = [];
}
}
2013-04-21 00:07:27 +00:00
$(function() {
2013-04-22 01:04:12 +00:00
documentLoaded = true;
runReadyCallbacks();
});
2013-05-25 00:34:04 +00:00
2013-05-26 22:59:03 +00:00
core.onReady(extensionManager.onReady);
2013-04-22 01:04:12 +00:00
core.onReady(function() {
2013-04-02 18:42:47 +00:00
2013-05-21 22:34:42 +00:00
// Load theme list
_.each(THEME_LIST, function(name, value) {
$("#input-settings-theme").append($('<option value="' + value + '">' + name + '</option>'));
});
2013-04-02 18:42:47 +00:00
// listen to online/offline events
$(window).on('offline', core.setOffline);
$(window).on('online', core.setOnline);
if (navigator.onLine === false) {
core.setOffline();
}
2013-04-10 18:14:59 +00:00
// Detect user activity
$(document).mousemove(setUserActive).keypress(setUserActive);
2013-04-02 18:42:47 +00:00
// Avoid dropdown to close when clicking on submenu
2013-04-21 18:41:10 +00:00
$(".dropdown-submenu > a").click(function(e) {
2013-04-02 18:42:47 +00:00
e.stopPropagation();
});
2013-04-04 22:13:48 +00:00
// Click events on "insert link" and "insert image" dialog buttons
$(".action-insert-link").click(function(e) {
2013-05-25 18:13:59 +00:00
var value = utils.getInputTextValue($("#input-insert-link"), e);
2013-04-04 22:13:48 +00:00
if(value !== undefined) {
insertLinkCallback(value);
}
});
$(".action-insert-image").click(function(e) {
2013-05-25 18:13:59 +00:00
var value = utils.getInputTextValue($("#input-insert-image"), e);
2013-04-04 22:13:48 +00:00
if(value !== undefined) {
insertLinkCallback(value);
}
});
$(".action-close-insert-link").click(function(e) {
insertLinkCallback(null);
});
2013-04-21 18:41:10 +00:00
// Settings loading/saving
$(".action-load-settings").click(function() {
core.loadSettings();
});
$(".action-apply-settings").click(function(e) {
core.saveSettings(e);
if(!e.isPropagationStopped()) {
window.location.reload();
}
});
2013-04-04 22:13:48 +00:00
2013-04-28 01:13:17 +00:00
$(".action-default-settings").click(function() {
localStorage.removeItem("settings");
2013-05-25 18:13:59 +00:00
localStorage.removeItem("theme");
2013-04-28 01:13:17 +00:00
window.location.reload();
});
$(".action-app-reset").click(function() {
localStorage.clear();
window.location.reload();
});
2013-04-21 18:41:10 +00:00
// UI layout
2013-04-02 18:42:47 +00:00
$("#menu-bar, .ui-layout-center, .ui-layout-east, .ui-layout-south").removeClass("hide");
2013-04-11 22:38:41 +00:00
core.createLayout();
2013-04-21 18:41:10 +00:00
// Editor's textarea
2013-04-26 23:08:13 +00:00
$("#wmd-input, #md-section-helper").css({
2013-04-21 18:41:10 +00:00
// Apply editor font size
2013-04-11 22:38:41 +00:00
"font-size": core.settings.editorFontSize + "px",
"line-height": Math.round(core.settings.editorFontSize * (20/14)) + "px"
2013-04-26 23:08:13 +00:00
});
// Manage tab key
$("#wmd-input").keydown(function(e) {
2013-04-21 16:27:52 +00:00
if(e.keyCode === 9) {
var value = $(this).val();
var start = this.selectionStart;
var end = this.selectionEnd;
// IE8 does not support selection attributes
if(start === undefined || end === undefined) {
return;
}
$(this).val(value.substring(0, start) + "\t" + value.substring(end));
this.selectionStart = this.selectionEnd = start + 1;
e.preventDefault();
}
2013-04-10 23:13:31 +00:00
});
2013-04-02 18:42:47 +00:00
2013-04-26 23:08:13 +00:00
// Tooltips
$(".tooltip-scroll-link").tooltip({
html: true,
container: '#modal-settings',
placement: 'right',
title: ['Scroll Link is a feature that binds together editor and preview scrollbars. ',
'It allows you to keep an eye on the preview while scrolling the editor and vice versa. ',
'<br><br>',
'The mapping between Markdown and HTML is based on the position of the title elements (h1, h2, ...) in the page. ',
'Therefore, if your document does not contain any title, the mapping will be linear and consequently less efficient.',
].join("")
});
2013-05-13 23:10:02 +00:00
$(".tooltip-lazy-rendering").tooltip({
container: '#modal-settings',
placement: 'right',
title: 'Disable preview rendering while typing in order to offload CPU. Refresh preview after 500 ms of inactivity.'
});
2013-04-29 21:41:10 +00:00
$(".tooltip-default-content").tooltip({
html: true,
container: '#modal-settings',
placement: 'right',
2013-05-26 01:10:58 +00:00
title: 'Thanks for supporting StackEdit by adding a backlink in your documents!'
2013-04-29 21:41:10 +00:00
});
2013-04-26 23:08:13 +00:00
$(".tooltip-template").tooltip({
html: true,
container: '#modal-settings',
placement: 'right',
trigger: 'manual',
title: ['Available variables:<br>',
'<ul><li><b>documentTitle</b>: document title</li>',
'<li><b>documentMarkdown</b>: document in Markdown format</li>',
'<li><b>documentHTML</b>: document in HTML format</li>',
'<li><b>publishAttributes</b>: attributes of the publish location (undefined when using "Save")</li></ul>',
'Examples:<br>',
_.escape('<title><%= documentTitle %></title>'),
'<br>',
_.escape('<div><%- documentHTML %></div>'),
'<br>',
_.escape('<% if(publishAttributes.provider == "github") print(documentMarkdown); %>'),
'<br><br><a target="_blank" href="http://underscorejs.org/#template">More info</a>',
].join("")
}).click(function(e) {
$(this).tooltip('show');
e.stopPropagation();
});
$(document).click(function(e) {
$(".tooltip-template").tooltip('hide');
});
2013-04-21 18:41:10 +00:00
// Reset inputs
2013-04-10 23:13:31 +00:00
$(".action-reset-input").click(function() {
2013-05-26 01:10:58 +00:00
utils.resetModalInputs();
2013-04-02 18:42:47 +00:00
});
2013-04-10 18:14:59 +00:00
// Do periodic tasks
2013-04-11 22:38:41 +00:00
intervalId = window.setInterval(function() {
2013-04-10 18:14:59 +00:00
updateCurrentTime();
core.checkWindowUnique();
2013-05-04 00:05:58 +00:00
if(isUserActive() === true || viewerMode === true) {
2013-04-21 00:07:27 +00:00
_.each(periodicCallbacks, function(callback) {
callback();
});
checkOnline();
2013-04-10 18:14:59 +00:00
}
}, 1000);
2013-04-21 00:07:27 +00:00
});
2013-04-02 18:42:47 +00:00
return core;
});