More Markdown refactoring - fixed bug with Pagedown not showing on user profile - replaced jQuery occurrences with $.

This commit is contained in:
Robin Ward 2013-03-05 15:39:21 -05:00
parent cf09e200a5
commit 86af49e663
43 changed files with 190 additions and 201 deletions

View File

@ -1,18 +1,18 @@
/**
This controller supports the interface for reviewing email logs.
@class AdminEmailLogsController
@class AdminEmailLogsController
@extends Ember.ArrayController
@namespace Discourse
@module Discourse
**/
**/
Discourse.AdminEmailLogsController = Ember.ArrayController.extend(Discourse.Presence, {
/**
Is the "send test email" button disabled?
@property sendTestEmailDisabled
**/
**/
sendTestEmailDisabled: (function() {
return this.blank('testEmailAddress');
}).property('testEmailAddress'),
@ -25,7 +25,7 @@ Discourse.AdminEmailLogsController = Ember.ArrayController.extend(Discourse.Pres
sendTestEmail: function() {
var _this = this;
_this.set('sentTestEmail', false);
jQuery.ajax({
$.ajax({
url: '/admin/email_logs/test',
type: 'POST',
data: { email_address: this.get('testEmailAddress') },
@ -35,5 +35,5 @@ Discourse.AdminEmailLogsController = Ember.ArrayController.extend(Discourse.Pres
});
return false;
}
});

View File

@ -10,7 +10,7 @@ Discourse.AdminUser = Discourse.Model.extend({
deleteAllPosts: function() {
this.set('can_delete_all_posts', false);
jQuery.ajax("/admin/users/" + (this.get('id')) + "/delete_all_posts", {type: 'PUT'});
$.ajax("/admin/users/" + (this.get('id')) + "/delete_all_posts", {type: 'PUT'});
},
// Revoke the user's admin access
@ -18,14 +18,14 @@ Discourse.AdminUser = Discourse.Model.extend({
this.set('admin', false);
this.set('can_grant_admin', true);
this.set('can_revoke_admin', false);
return jQuery.ajax("/admin/users/" + (this.get('id')) + "/revoke_admin", {type: 'PUT'});
return $.ajax("/admin/users/" + (this.get('id')) + "/revoke_admin", {type: 'PUT'});
},
grantAdmin: function() {
this.set('admin', true);
this.set('can_grant_admin', false);
this.set('can_revoke_admin', true);
jQuery.ajax("/admin/users/" + (this.get('id')) + "/grant_admin", {type: 'PUT'});
$.ajax("/admin/users/" + (this.get('id')) + "/grant_admin", {type: 'PUT'});
},
// Revoke the user's moderation access
@ -33,18 +33,18 @@ Discourse.AdminUser = Discourse.Model.extend({
this.set('moderator', false);
this.set('can_grant_moderation', true);
this.set('can_revoke_moderation', false);
return jQuery.ajax("/admin/users/" + (this.get('id')) + "/revoke_moderation", {type: 'PUT'});
return $.ajax("/admin/users/" + (this.get('id')) + "/revoke_moderation", {type: 'PUT'});
},
grantModeration: function() {
this.set('moderator', true);
this.set('can_grant_moderation', false);
this.set('can_revoke_moderation', true);
jQuery.ajax("/admin/users/" + (this.get('id')) + "/grant_moderation", {type: 'PUT'});
$.ajax("/admin/users/" + (this.get('id')) + "/grant_moderation", {type: 'PUT'});
},
refreshBrowsers: function() {
jQuery.ajax("/admin/users/" + (this.get('id')) + "/refresh_browsers", {type: 'POST'});
$.ajax("/admin/users/" + (this.get('id')) + "/refresh_browsers", {type: 'POST'});
bootbox.alert("Message sent to all clients!");
},
@ -52,7 +52,7 @@ Discourse.AdminUser = Discourse.Model.extend({
this.set('can_approve', false);
this.set('approved', true);
this.set('approved_by', Discourse.get('currentUser'));
jQuery.ajax("/admin/users/" + (this.get('id')) + "/approve", {type: 'PUT'});
$.ajax("/admin/users/" + (this.get('id')) + "/approve", {type: 'PUT'});
},
username_lower: (function() {
@ -79,7 +79,7 @@ Discourse.AdminUser = Discourse.Model.extend({
_this = this;
if (duration = parseInt(window.prompt(Em.String.i18n('admin.user.ban_duration')), 10)) {
if (duration > 0) {
return jQuery.ajax("/admin/users/" + this.id + "/ban", {
return $.ajax("/admin/users/" + this.id + "/ban", {
type: 'PUT',
data: {duration: duration},
success: function() {
@ -99,7 +99,7 @@ Discourse.AdminUser = Discourse.Model.extend({
unban: function() {
var _this = this;
return jQuery.ajax("/admin/users/" + this.id + "/unban", {
return $.ajax("/admin/users/" + this.id + "/unban", {
type: 'PUT',
success: function() {
window.location.reload();
@ -116,7 +116,7 @@ Discourse.AdminUser = Discourse.Model.extend({
impersonate: function() {
var _this = this;
return jQuery.ajax("/admin/impersonate", {
return $.ajax("/admin/impersonate", {
type: 'POST',
data: {
username_or_email: this.get('username')
@ -145,7 +145,7 @@ Discourse.AdminUser.reopenClass({
user.set('can_approve', false);
return user.set('selected', false);
});
return jQuery.ajax("/admin/users/approve-bulk", {
return $.ajax("/admin/users/approve-bulk", {
type: 'PUT',
data: {
users: users.map(function(u) {
@ -158,7 +158,7 @@ Discourse.AdminUser.reopenClass({
find: function(username) {
var promise;
promise = new RSVP.Promise();
jQuery.ajax({
$.ajax({
url: "/admin/users/" + username,
success: function(result) {
return promise.resolve(Discourse.AdminUser.create(result));
@ -170,7 +170,7 @@ Discourse.AdminUser.reopenClass({
findAll: function(query, filter) {
var result;
result = Em.A();
jQuery.ajax({
$.ajax({
url: "/admin/users/list/" + query + ".json",
data: {
filter: filter

View File

@ -1,11 +1,11 @@
/**
Our data model for representing an email log.
@class EmailLog
@class EmailLog
@extends Discourse.Model
@namespace Discourse
@module Discourse
**/
**/
Discourse.EmailLog = Discourse.Model.extend({});
Discourse.EmailLog.reopenClass({
@ -19,7 +19,7 @@ Discourse.EmailLog.reopenClass({
findAll: function(filter) {
var result;
result = Em.A();
jQuery.ajax({
$.ajax({
url: "/admin/email_logs.json",
data: { filter: filter },
success: function(logs) {

View File

@ -1,11 +1,11 @@
/**
Our data model for interacting with flagged posts.
@class FlaggedPost
@class FlaggedPost
@extends Discourse.Post
@namespace Discourse
@module Discourse
**/
**/
Discourse.FlaggedPost = Discourse.Post.extend({
flaggers: (function() {
@ -49,7 +49,7 @@ Discourse.FlaggedPost = Discourse.Post.extend({
var promise;
promise = new RSVP.Promise();
if (this.get('post_number') === "1") {
return jQuery.ajax("/t/" + this.topic_id, {
return $.ajax("/t/" + this.topic_id, {
type: 'DELETE',
cache: false,
success: function() {
@ -60,7 +60,7 @@ Discourse.FlaggedPost = Discourse.Post.extend({
}
});
} else {
return jQuery.ajax("/posts/" + this.id, {
return $.ajax("/posts/" + this.id, {
type: 'DELETE',
cache: false,
success: function() {
@ -76,7 +76,7 @@ Discourse.FlaggedPost = Discourse.Post.extend({
clearFlags: function() {
var promise;
promise = new RSVP.Promise();
jQuery.ajax("/admin/flags/clear/" + this.id, {
$.ajax("/admin/flags/clear/" + this.id, {
type: 'POST',
cache: false,
success: function() {
@ -99,7 +99,7 @@ Discourse.FlaggedPost.reopenClass({
findAll: function(filter) {
var result;
result = Em.A();
jQuery.ajax({
$.ajax({
url: "/admin/flags/" + filter + ".json",
success: function(data) {
var userLookup;

View File

@ -3,7 +3,7 @@ Discourse.Report = Discourse.Model.extend({});
Discourse.Report.reopenClass({
find: function(type) {
var model = Discourse.Report.create();
jQuery.ajax("/admin/reports/" + type, {
$.ajax("/admin/reports/" + type, {
type: 'GET',
success: function(json) {
model.mergeAttributes(json.report);

View File

@ -1,11 +1,11 @@
/**
Our data model for interacting with site customizations.
@class SiteCustomization
@class SiteCustomization
@extends Discourse.Model
@namespace Discourse
@module Discourse
**/
**/
Discourse.SiteCustomization = Discourse.Model.extend({
trackedProperties: ['enabled', 'name', 'stylesheet', 'header', 'override_default_style'],
@ -13,7 +13,7 @@ Discourse.SiteCustomization = Discourse.Model.extend({
this._super();
return this.startTrackingChanges();
},
description: (function() {
return "" + this.name + (this.enabled ? ' (*)' : '');
}).property('selected', 'name'),
@ -55,7 +55,7 @@ Discourse.SiteCustomization = Discourse.Model.extend({
header: this.header,
override_default_style: this.override_default_style
};
return jQuery.ajax({
return $.ajax({
url: "/admin/site_customizations" + (this.id ? '/' + this.id : ''),
data: {
site_customization: data
@ -66,8 +66,8 @@ Discourse.SiteCustomization = Discourse.Model.extend({
"delete": function() {
if (!this.id) return;
return jQuery.ajax({
return $.ajax({
url: "/admin/site_customizations/" + this.id,
type: 'DELETE'
});
@ -93,7 +93,7 @@ Discourse.SiteCustomization.reopenClass({
content: [],
loading: true
});
jQuery.ajax({
$.ajax({
url: "/admin/site_customizations",
dataType: "json",
success: function(data) {

View File

@ -72,7 +72,7 @@ Discourse.SiteSetting = Discourse.Model.extend({
save: function() {
// Update the setting
var setting = this;
return jQuery.ajax("/admin/site_settings/" + (this.get('setting')), {
return $.ajax("/admin/site_settings/" + (this.get('setting')), {
data: { value: this.get('value') },
type: 'PUT',
success: function() {
@ -91,7 +91,7 @@ Discourse.SiteSetting.reopenClass({
**/
findAll: function() {
var result = Em.A();
jQuery.get("/admin/site_settings", function(settings) {
$.get("/admin/site_settings", function(settings) {
return settings.each(function(s) {
s.originalValue = s.value;
return result.pushObject(Discourse.SiteSetting.create(s));

View File

@ -23,7 +23,7 @@ Discourse.VersionCheck = Discourse.Model.extend({
Discourse.VersionCheck.reopenClass({
find: function() {
var promise = new RSVP.Promise();
jQuery.ajax({
$.ajax({
url: '/admin/version_check',
dataType: 'json',
success: function(json) {

View File

@ -142,7 +142,7 @@ Discourse = Ember.Application.createWithMixins({
// Add a CSRF token to all AJAX requests
var csrfToken = $('meta[name=csrf-token]').attr('content');
jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {
$.ajaxPrefilter(function(options, originalOptions, xhr) {
if (!options.crossDomain) {
xhr.setRequestHeader('X-CSRF-Token', csrfToken);
}
@ -156,7 +156,7 @@ Discourse = Ember.Application.createWithMixins({
**/
logout: function() {
Discourse.KeyValueStore.abandonLocal();
return jQuery.ajax("/session/" + this.get('currentUser.username'), {
return $.ajax("/session/" + this.get('currentUser.username'), {
type: 'DELETE',
success: function(result) {
// To keep lots of our variables unbound, we can handle a redirect on logging out.

View File

@ -47,7 +47,7 @@ $.fn.autocomplete = function(options) {
}
return d.find('a').click(function() {
closeAutocomplete();
inputSelectedItems.splice(jQuery.inArray(item), 1);
inputSelectedItems.splice($.inArray(item), 1);
$(this).parent().parent().remove();
if (options.onChangeItems) {
return options.onChangeItems(inputSelectedItems);

View File

@ -70,7 +70,7 @@ Discourse.ClickTrack = {
// if they want to open in a new tab, do an AJAX request
if (e.metaKey || e.ctrlKey || e.which === 2) {
jQuery.get("/clicks/track", {
$.get("/clicks/track", {
url: href,
post_id: postId,
topic_id: topicId,
@ -82,7 +82,7 @@ Discourse.ClickTrack = {
// If we're on the same site, use the router and track via AJAX
if (href.indexOf(window.location.origin) === 0) {
jQuery.get("/clicks/track", {
$.get("/clicks/track", {
url: href,
post_id: postId,
topic_id: topicId,

View File

@ -129,7 +129,7 @@ Discourse.Development = {
return $LAB.script(js + "?hash=" + me.hash).wait(function() {
var templateName;
templateName = js.replace(".js", "").replace("/assets/", "");
return jQuery.each(Ember.View.views, function() {
return $.each(Ember.View.views, function() {
var _this = this;
if (this.get('templateName') === templateName) {
this.set('templateName', 'empty');

View File

@ -1,4 +1,4 @@
/*global sanitizeHtml:true Markdown:true */
/*global Markdown:true */
/**
Contains methods to help us with markdown formatting.
@ -15,6 +15,7 @@ Discourse.Markdown = {
@method cook
@param {String} raw the raw string we want to apply markdown to
@param {Object} opts the options for the rendering
@return {String} the cooked markdown string
**/
cook: function(raw, opts) {
if (!opts) opts = {};
@ -23,60 +24,67 @@ Discourse.Markdown = {
if (!raw) return "";
if (raw.length === 0) return "";
this.converter = this.markdownConverter(opts);
return this.converter.makeHtml(raw);
return this.markdownConverter(opts).makeHtml(raw);
},
/**
Creates a new markdown editor
Creates a new pagedown markdown editor, supplying i18n translations.
@method createNewMarkdownEditor
@param {Markdown.Converter} markdownConverter the converter object
@param {String} idPostfix
@param {Object} options the options for the markdown editor
@method createEditor
@param {Object} converterOptions custom options for our markdown converter
@return {Markdown.Editor} the editor instance
**/
createNewMarkdownEditor: function(markdownConverter, idPostfix, options) {
options = options || {};
options.strings = {
bold: I18n.t("js.composer.bold_title") + " <strong> Ctrl+B",
boldexample: I18n.t("js.composer.bold_text"),
createEditor: function(converterOptions) {
italic: I18n.t("js.composer.italic_title") + " <em> Ctrl+I",
italicexample: I18n.t("js.composer.italic_text"),
if (!converterOptions) converterOptions = {};
link: I18n.t("js.composer.link_title") + " <a> Ctrl+L",
linkdescription: "enter link description here",
linkdialog: "<p><b>" + I18n.t("js.composer.link_dialog_title") + "</b></p><p>http://example.com/ \"" +
I18n.t("js.composer.link_optional_text") + "\"</p>",
// By default we always sanitize content in the editor
converterOptions.sanitize = true;
quote: I18n.t("js.composer.quote_title") + " <blockquote> Ctrl+Q",
quoteexample: I18n.t("js.composer.quote_text"),
var markdownConverter = Discourse.Markdown.markdownConverter(converterOptions);
code: I18n.t("js.composer.code_title") + " <pre><code> Ctrl+K",
codeexample: I18n.t("js.composer.code_text"),
var editorOptions = {
strings: {
bold: I18n.t("js.composer.bold_title") + " <strong> Ctrl+B",
boldexample: I18n.t("js.composer.bold_text"),
image: I18n.t("js.composer.image_title") + " <img> Ctrl+G",
imagedescription: I18n.t("js.composer.image_description"),
imagedialog: "<p><b>" + I18n.t("js.composer.image_dialog_title") + "</b></p><p>http://example.com/images/diagram.jpg \"" +
I18n.t("js.composer.image_optional_text") + "\"<br><br>" + I18n.t("js.composer.image_hosting_hint") + "</p>",
italic: I18n.t("js.composer.italic_title") + " <em> Ctrl+I",
italicexample: I18n.t("js.composer.italic_text"),
olist: I18n.t("js.composer.olist_title") + " <ol> Ctrl+O",
ulist: I18n.t("js.composer.ulist_title") + " <ul> Ctrl+U",
litem: I18n.t("js.compser.list_item"),
link: I18n.t("js.composer.link_title") + " <a> Ctrl+L",
linkdescription: "enter link description here",
linkdialog: "<p><b>" + I18n.t("js.composer.link_dialog_title") + "</b></p><p>http://example.com/ \"" +
I18n.t("js.composer.link_optional_text") + "\"</p>",
heading: I18n.t("js.composer.heading_title") + " <h1>/<h2> Ctrl+H",
headingexample: I18n.t("js.composer.heading_text"),
quote: I18n.t("js.composer.quote_title") + " <blockquote> Ctrl+Q",
quoteexample: I18n.t("js.composer.quote_text"),
hr: I18n.t("js.composer_hr_title") + " <hr> Ctrl+R",
code: I18n.t("js.composer.code_title") + " <pre><code> Ctrl+K",
codeexample: I18n.t("js.composer.code_text"),
undo: I18n.t("js.composer.undo_title") + " - Ctrl+Z",
redo: I18n.t("js.composer.redo_title") + " - Ctrl+Y",
redomac: I18n.t("js.composer.redo_title") + " - Ctrl+Shift+Z",
image: I18n.t("js.composer.image_title") + " <img> Ctrl+G",
imagedescription: I18n.t("js.composer.image_description"),
imagedialog: "<p><b>" + I18n.t("js.composer.image_dialog_title") + "</b></p><p>http://example.com/images/diagram.jpg \"" +
I18n.t("js.composer.image_optional_text") + "\"<br><br>" + I18n.t("js.composer.image_hosting_hint") + "</p>",
help: I18n.t("js.composer.help")
olist: I18n.t("js.composer.olist_title") + " <ol> Ctrl+O",
ulist: I18n.t("js.composer.ulist_title") + " <ul> Ctrl+U",
litem: I18n.t("js.compser.list_item"),
heading: I18n.t("js.composer.heading_title") + " <h1>/<h2> Ctrl+H",
headingexample: I18n.t("js.composer.heading_text"),
hr: I18n.t("js.composer_hr_title") + " <hr> Ctrl+R",
undo: I18n.t("js.composer.undo_title") + " - Ctrl+Z",
redo: I18n.t("js.composer.redo_title") + " - Ctrl+Y",
redomac: I18n.t("js.composer.redo_title") + " - Ctrl+Shift+Z",
help: I18n.t("js.composer.help")
}
};
return new Markdown.Editor(markdownConverter, idPostfix, options);
return new Markdown.Editor(markdownConverter, undefined, editorOptions);
},
/**
@ -86,21 +94,15 @@ Discourse.Markdown = {
@param {Object} opts the converting options
**/
markdownConverter: function(opts) {
var converter, mentionLookup,
_this = this;
converter = new Markdown.Converter();
if (opts) {
mentionLookup = opts.mentionLookup;
}
mentionLookup = mentionLookup || Discourse.Mention.lookupCache;
if (!opts) opts = {};
var converter = new Markdown.Converter();
var mentionLookup = opts.mentionLookup || Discourse.Mention.lookupCache;
// Before cooking callbacks
converter.hooks.chain("preConversion", function(text) {
_this.trigger('beforeCook', {
detail: text,
opts: opts
});
return _this.textResult || text;
Discourse.Markdown.trigger('beforeCook', { detail: text, opts: opts });
return Discourse.Markdown.textResult || text;
});
// Support autolinking of www.something.com
@ -114,9 +116,7 @@ Discourse.Markdown = {
if (!Discourse.SiteSettings.traditional_markdown_linebreaks) {
converter.hooks.chain("preConversion", function(text) {
return text.replace(/(^[\w<][^\n]*\n+)/gim, function(t) {
if (t.match(/\n{2}/gim)) {
return t;
}
if (t.match(/\n{2}/gim)) return t;
return t.replace("\n", " \n");
});
});
@ -125,8 +125,7 @@ Discourse.Markdown = {
// github style fenced code
converter.hooks.chain("preConversion", function(text) {
return text.replace(/^`{3}(?:(.*$)\n)?([\s\S]*?)^`{3}/gm, function(wholeMatch, m1, m2) {
var escaped;
escaped = Handlebars.Utils.escapeExpression(m2);
var escaped = Handlebars.Utils.escapeExpression(m2);
return "<pre><code class='" + (m1 || 'lang-auto') + "'>" + escaped + "</code></pre>";
});
});
@ -142,20 +141,19 @@ Discourse.Markdown = {
// Add @mentions of names
text = text.replace(/([\s\t>,:'|";\]])(@[A-Za-z0-9_-|\.]*[A-Za-z0-9_-|]+)(?=[\s\t<\!:|;',"\?\.])/g, function(x, pre, name) {
if (mentionLookup(name.substr(1))) {
return "" + pre + "<a href='/users/" + (name.substr(1).toLowerCase()) + "' class='mention'>" + name + "</a>";
return pre + "<a href='/users/" + (name.substr(1).toLowerCase()) + "' class='mention'>" + name + "</a>";
} else {
return "" + pre + "<span class='mention'>" + name + "</span>";
return pre + "<span class='mention'>" + name + "</span>";
}
});
// a primitive attempt at oneboxing, this regex gives me much eye sores
text = text.replace(/(<li>)?((<p>|<br>)[\s\n\r]*)(<a href=["]([^"]+)[^>]*)>([^<]+<\/a>[\s\n\r]*(?=<\/p>|<br>))/gi, function() {
// We don't onebox items in a list
var onebox, url;
if (arguments[1]) {
return arguments[0];
}
url = arguments[5];
if (arguments[1]) return arguments[0];
var url = arguments[5];
var onebox;
if (Discourse && Discourse.Onebox) {
onebox = Discourse.Onebox.lookupCache(url);
}
@ -175,10 +173,8 @@ Discourse.Markdown = {
if (opts.sanitize) {
converter.hooks.chain("postConversion", function(text) {
if (!window.sanitizeHtml) {
return "";
}
return sanitizeHtml(text);
if (!window.sanitizeHtml) return "";
return window.sanitizeHtml(text);
});
}
return converter;

View File

@ -21,7 +21,7 @@ Discourse.Mention = (function() {
callback(cached);
return false;
} else {
jQuery.get("/users/is_local_username", {
$.get("/users/is_local_username", {
username: name
}, function(r) {
cache(name, r.valid);

View File

@ -6,7 +6,7 @@
@class MessageBus
@namespace Discourse
@module Discourse
**/
**/
Discourse.MessageBus = (function() {
// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
var callbacks, clientId, failCount, interval, isHidden, queue, responseCallbacks, uniqueId;
@ -68,7 +68,7 @@ Discourse.MessageBus = (function() {
data[c.channel] = c.last_id === void 0 ? -1 : c.last_id;
});
gotData = false;
_this.longPoll = jQuery.ajax("/message-bus/" + clientId + "/poll?" + (isHidden() || !_this.enableLongPolling ? "dlp=t" : ""), {
_this.longPoll = $.ajax("/message-bus/" + clientId + "/poll?" + (isHidden() || !_this.enableLongPolling ? "dlp=t" : ""), {
data: data,
cache: false,
dataType: 'json',

View File

@ -98,7 +98,7 @@ Discourse.ScreenTrack = Ember.Object.extend({
highestSeenByTopic[topicId] = this.highestSeen;
}
if (!Object.isEmpty(newTimings)) {
jQuery.ajax('/topics/timings', {
$.ajax('/topics/timings', {
data: {
timings: newTimings,
topic_time: this.topicTime,

View File

@ -3,7 +3,7 @@
@class UserSearch
@namespace Discourse
@module Discourse
@module Discourse
**/
var cache, cacheTime, cacheTopicId, debouncedSearch, doSearch;
@ -14,7 +14,7 @@ cacheTopicId = null;
cacheTime = null;
doSearch = function(term, topicId, success) {
return jQuery.ajax({
return $.ajax({
url: '/users/search/users',
dataType: 'JSON',
data: {

View File

@ -22,7 +22,7 @@ Discourse.StaticController = Discourse.Controller.extend({
text = text[1];
return this.set('content', text);
} else {
return jQuery.ajax({
return $.ajax({
url: "" + path + ".json",
success: function(result) {
return _this.set('content', result);

View File

@ -54,7 +54,7 @@ Discourse.ActionSummary = Discourse.Model.extend({
// Create our post action
promise = new RSVP.Promise();
jQuery.ajax({
$.ajax({
url: "/post_actions",
type: 'POST',
data: {
@ -65,7 +65,7 @@ Discourse.ActionSummary = Discourse.Model.extend({
error: function(error) {
var errors;
_this.removeAction();
errors = jQuery.parseJSON(error.responseText).errors;
errors = $.parseJSON(error.responseText).errors;
return promise.reject(errors);
},
success: function() {
@ -80,7 +80,7 @@ Discourse.ActionSummary = Discourse.Model.extend({
this.removeAction();
// Remove our post action
return jQuery.ajax({
return $.ajax({
url: "/post_actions/" + (this.get('post.id')),
type: 'DELETE',
data: {
@ -91,7 +91,7 @@ Discourse.ActionSummary = Discourse.Model.extend({
clearFlags: function() {
var _this = this;
return jQuery.ajax({
return $.ajax({
url: "/post_actions/clear_flags",
type: "POST",
data: {
@ -107,7 +107,7 @@ Discourse.ActionSummary = Discourse.Model.extend({
loadUsers: function() {
var _this = this;
return jQuery.getJSON("/post_actions/users", {
return $.getJSON("/post_actions/users", {
id: this.get('post.id'),
post_action_type_id: this.get('id')
}, function(result) {

View File

@ -42,7 +42,7 @@ Discourse.Category = Discourse.Model.extend({
"delete": function(callback) {
var _this = this;
return jQuery.ajax("/categories/" + (this.get('slug')), {
return $.ajax("/categories/" + (this.get('slug')), {
type: 'DELETE',
success: function() {
return callback();

View File

@ -34,7 +34,7 @@ Discourse.CategoryList.reopenClass({
var promise,
_this = this;
promise = new RSVP.Promise();
jQuery.getJSON("/" + filter + ".json").then(function(result) {
$.getJSON("/" + filter + ".json").then(function(result) {
var categoryList;
categoryList = Discourse.TopicList.create();
categoryList.set('can_create_category', result.category_list.can_create_category);

View File

@ -318,7 +318,7 @@ Discourse.Composer = Discourse.Model.extend({
}
}, function(error) {
var errors;
errors = jQuery.parseJSON(error.responseText).errors;
errors = $.parseJSON(error.responseText).errors;
promise.reject(errors[0]);
post.set('cooked', oldCooked);
return _this.set('composeState', OPEN);
@ -419,7 +419,7 @@ Discourse.Composer = Discourse.Model.extend({
if (topic) {
topic.posts.removeObject(createdPost);
}
errors = jQuery.parseJSON(error.responseText).errors;
errors = $.parseJSON(error.responseText).errors;
promise.reject(errors[0]);
return _this.set('composeState', OPEN);
});

View File

@ -11,7 +11,7 @@ Discourse.Draft = Discourse.Model.extend({});
Discourse.Draft.reopenClass({
clear: function(key, sequence) {
return jQuery.ajax({
return $.ajax({
type: 'DELETE',
url: "/draft",
data: {
@ -25,7 +25,7 @@ Discourse.Draft.reopenClass({
var promise,
_this = this;
promise = new RSVP.Promise();
jQuery.ajax({
$.ajax({
url: '/draft',
data: {
draft_key: key
@ -47,7 +47,7 @@ Discourse.Draft.reopenClass({
var promise;
promise = new RSVP.Promise();
data = typeof data === "string" ? data : JSON.stringify(data);
jQuery.ajax({
$.ajax({
type: 'POST',
url: "/draft",
data: {

View File

@ -10,7 +10,7 @@
Discourse.Invite = Discourse.Model.extend({
rescind: function() {
jQuery.ajax('/invites', {
$.ajax('/invites', {
type: 'DELETE',
data: { email: this.get('email') }
});

View File

@ -17,7 +17,7 @@ Discourse.InviteList.reopenClass({
findInvitedBy: function(user) {
var promise;
promise = new RSVP.Promise();
jQuery.ajax({
$.ajax({
url: "/users/" + (user.get('username_lower')) + "/invited.json",
success: function(result) {
var invitedList;

View File

@ -14,14 +14,14 @@ Discourse.Model = Ember.Object.extend(Discourse.Presence, {
@method ajax
@param {String} url The url to contact
@param {Object} args The arguments to pass to jQuery.ajax
@param {Object} args The arguments to pass to $.ajax
**/
ajax: function(url, args) {
var oldError = args.error;
args.error = function(xhr) {
return oldError(jQuery.parseJSON(xhr.responseText).errors);
return oldError($.parseJSON(xhr.responseText).errors);
};
return jQuery.ajax(url, args);
return $.ajax(url, args);
},
/**

View File

@ -64,7 +64,7 @@ Discourse.Post = Discourse.Model.extend({
bookmarkedChanged: (function() {
var _this = this;
return jQuery.ajax({
return $.ajax({
url: "/posts/" + (this.get('id')) + "/bookmark",
type: 'PUT',
data: {
@ -72,7 +72,7 @@ Discourse.Post = Discourse.Model.extend({
},
error: function(error) {
var errors;
errors = jQuery.parseJSON(error.responseText).errors;
errors = $.parseJSON(error.responseText).errors;
bootbox.alert(errors[0]);
return _this.toggleProperty('bookmarked');
}
@ -123,7 +123,7 @@ Discourse.Post = Discourse.Model.extend({
var data, metaData;
if (!this.get('newPost')) {
// We're updating a post
return jQuery.ajax({
return $.ajax({
url: "/posts/" + (this.get('id')),
type: 'PUT',
data: {
@ -153,7 +153,7 @@ Discourse.Post = Discourse.Model.extend({
data.meta_data = {};
Ember.keys(metaData).forEach(function(key) { data.meta_data[key] = metaData.get(key); });
}
return jQuery.ajax({
return $.ajax({
type: 'POST',
url: "/posts",
data: data,
@ -168,11 +168,11 @@ Discourse.Post = Discourse.Model.extend({
},
recover: function() {
return jQuery.ajax("/posts/" + (this.get('id')) + "/recover", { type: 'PUT', cache: false });
return $.ajax("/posts/" + (this.get('id')) + "/recover", { type: 'PUT', cache: false });
},
"delete": function(complete) {
return jQuery.ajax("/posts/" + (this.get('id')), {
return $.ajax("/posts/" + (this.get('id')), {
type: 'DELETE',
success: function(result) {
return typeof complete === "function" ? complete() : void 0;
@ -220,7 +220,7 @@ Discourse.Post = Discourse.Model.extend({
promise = new RSVP.Promise();
this.set('loadingReplies', true);
this.set('replies', []);
jQuery.getJSON("/posts/" + (this.get('id')) + "/replies", function(loaded) {
$.getJSON("/posts/" + (this.get('id')) + "/replies", function(loaded) {
loaded.each(function(reply) {
var post;
post = Discourse.Post.create(reply);
@ -234,7 +234,7 @@ Discourse.Post = Discourse.Model.extend({
},
loadVersions: function(callback) {
return jQuery.get("/posts/" + (this.get('id')) + "/versions.json", function(result) {
return $.get("/posts/" + (this.get('id')) + "/versions.json", function(result) {
return callback(result);
});
},
@ -290,7 +290,7 @@ Discourse.Post.reopenClass({
},
deleteMany: function(posts) {
return jQuery.ajax("/posts/destroy_many", {
return $.ajax("/posts/destroy_many", {
type: 'DELETE',
data: {
post_ids: posts.map(function(p) {
@ -302,14 +302,14 @@ Discourse.Post.reopenClass({
loadVersion: function(postId, version, callback) {
var _this = this;
return jQuery.getJSON("/posts/" + postId + ".json?version=" + version, function(result) {
return $.getJSON("/posts/" + postId + ".json?version=" + version, function(result) {
return callback(Discourse.Post.create(result));
});
},
loadByPostNumber: function(topicId, postId, callback) {
var _this = this;
return jQuery.getJSON("/posts/by_number/" + topicId + "/" + postId + ".json", function(result) {
return $.getJSON("/posts/by_number/" + topicId + "/" + postId + ".json", function(result) {
return callback(Discourse.Post.create(result));
});
},
@ -318,7 +318,7 @@ Discourse.Post.reopenClass({
var promise,
_this = this;
promise = new RSVP.Promise();
jQuery.getJSON("/posts/" + postId + ".json", function(result) {
$.getJSON("/posts/" + postId + ".json", function(result) {
var post;
post = Discourse.Post.create(result);
return promise.resolve(Discourse.BBCode.buildQuoteBBCode(post, post.get('raw')));
@ -328,7 +328,7 @@ Discourse.Post.reopenClass({
load: function(postId, callback) {
var _this = this;
return jQuery.getJSON("/posts/" + postId + ".json", function(result) {
return $.getJSON("/posts/" + postId + ".json", function(result) {
return callback(Discourse.Post.create(result));
});
}

View File

@ -24,7 +24,7 @@ Discourse.Topic = Discourse.Model.extend({
a = this.get('archetype');
if (a !== 'regular' && a !== 'private_message') {
this.set('archetype', 'regular');
return jQuery.post(this.get('url'), {
return $.post(this.get('url'), {
_method: 'put',
archetype: 'regular'
});
@ -134,7 +134,7 @@ Discourse.Topic = Discourse.Model.extend({
toggleStatus: function(property) {
this.toggleProperty(property);
return jQuery.post("" + (this.get('url')) + "/status", {
return $.post("" + (this.get('url')) + "/status", {
_method: 'put',
status: property,
enabled: this.get(property) ? 'true' : 'false'
@ -144,13 +144,13 @@ Discourse.Topic = Discourse.Model.extend({
toggleStar: function() {
var topic = this;
topic.toggleProperty('starred');
return jQuery.ajax({
return $.ajax({
url: "" + (this.get('url')) + "/star",
type: 'PUT',
data: { starred: topic.get('starred') ? true : false },
error: function(error) {
topic.toggleProperty('starred');
var errors = jQuery.parseJSON(error.responseText).errors;
var errors = $.parseJSON(error.responseText).errors;
return bootbox.alert(errors[0]);
}
});
@ -160,7 +160,7 @@ Discourse.Topic = Discourse.Model.extend({
save: function() {
// Don't save unless we can
if (!this.get('can_edit')) return;
return jQuery.post(this.get('url'), {
return $.post(this.get('url'), {
_method: 'put',
title: this.get('title'),
category: this.get('category.name')
@ -169,7 +169,7 @@ Discourse.Topic = Discourse.Model.extend({
// Reset our read data for this topic
resetRead: function(callback) {
return jQuery.ajax("/t/" + (this.get('id')) + "/timings", {
return $.ajax("/t/" + (this.get('id')) + "/timings", {
type: 'DELETE',
success: function() {
return typeof callback === "function" ? callback() : void 0;
@ -179,7 +179,7 @@ Discourse.Topic = Discourse.Model.extend({
// Invite a user to this topic
inviteUser: function(user) {
return jQuery.ajax({
return $.ajax({
type: 'POST',
url: "/t/" + (this.get('id')) + "/invite",
data: {
@ -190,7 +190,7 @@ Discourse.Topic = Discourse.Model.extend({
// Delete this topic
"delete": function(callback) {
return jQuery.ajax("/t/" + (this.get('id')), {
return $.ajax("/t/" + (this.get('id')), {
type: 'DELETE',
success: function() {
return typeof callback === "function" ? callback() : void 0;
@ -305,7 +305,7 @@ Discourse.Topic = Discourse.Model.extend({
updateNotifications: function(v) {
this.set('notification_level', v);
this.set('notifications_reason_id', null);
return jQuery.ajax({
return $.ajax({
url: "/t/" + (this.get('id')) + "/notifications",
type: 'POST',
data: {
@ -389,7 +389,7 @@ Discourse.Topic.reopenClass({
// Check the preload store. If not, load it via JSON
promise = new RSVP.Promise();
PreloadStore.get("topic_" + topicId, function() {
return jQuery.getJSON(url + ".json", data);
return $.getJSON(url + ".json", data);
}).then(function(result) {
var first;
first = result.posts.first();
@ -405,7 +405,7 @@ Discourse.Topic.reopenClass({
// Create a topic from posts
movePosts: function(topicId, title, postIds) {
return jQuery.ajax("/t/" + topicId + "/move-posts", {
return $.ajax("/t/" + topicId + "/move-posts", {
type: 'POST',
data: { title: title, post_ids: postIds }
});

View File

@ -15,7 +15,7 @@ Discourse.TopicList = Discourse.Model.extend({
promise = new RSVP.Promise();
if (moreUrl = this.get('more_topics_url')) {
Discourse.URL.replaceState("/" + (this.get('filter')) + "/more");
jQuery.ajax(moreUrl, {
$.ajax(moreUrl, {
success: function(result) {
var newTopics, topicIds, topics;
if (result) {
@ -108,7 +108,7 @@ Discourse.TopicList.reopenClass({
promise = new RSVP.Promise();
found = PreloadStore.contains('topic_list');
PreloadStore.get("topic_list", function() {
return jQuery.getJSON(url);
return $.getJSON(url);
}).then(function(result) {
topic_list.set('topics', Discourse.TopicList.topicsFrom(result));
topic_list.set('can_create_topic', result.topic_list.can_create_topic);

View File

@ -33,7 +33,7 @@ Discourse.User = Discourse.Model.extend({
}).property('trust_level'),
changeUsername: function(newUsername) {
return jQuery.ajax({
return $.ajax({
url: "/users/" + (this.get('username_lower')) + "/preferences/username",
type: 'PUT',
data: {
@ -43,7 +43,7 @@ Discourse.User = Discourse.Model.extend({
},
changeEmail: function(email) {
return jQuery.ajax({
return $.ajax({
url: "/users/" + (this.get('username_lower')) + "/preferences/email",
type: 'PUT',
data: {
@ -58,7 +58,7 @@ Discourse.User = Discourse.Model.extend({
save: function(finished) {
var _this = this;
return jQuery.ajax("/users/" + this.get('username').toLowerCase(), {
return $.ajax("/users/" + this.get('username').toLowerCase(), {
data: this.getProperties('auto_track_topics_after_msecs',
'bio_raw',
'website',
@ -77,7 +77,7 @@ Discourse.User = Discourse.Model.extend({
changePassword: function(callback) {
var good;
good = false;
return jQuery.ajax({
return $.ajax({
url: '/session/forgot_password',
dataType: 'json',
data: {
@ -109,7 +109,7 @@ Discourse.User = Discourse.Model.extend({
var stream,
_this = this;
stream = this.get('stream');
return jQuery.ajax({
return $.ajax({
url: "/user_actions/" + id + ".json",
dataType: 'json',
cache: 'false',
@ -142,7 +142,7 @@ Discourse.User = Discourse.Model.extend({
url += "&filter=" + (this.get('streamFilter'));
}
return jQuery.ajax({
return $.ajax({
url: url,
dataType: 'json',
cache: 'false',
@ -226,7 +226,7 @@ Discourse.User = Discourse.Model.extend({
Discourse.User.reopenClass({
checkUsername: function(username, email) {
return jQuery.ajax({
return $.ajax({
url: '/users/check_username',
type: 'GET',
data: {
@ -278,7 +278,7 @@ Discourse.User.reopenClass({
var promise,
_this = this;
promise = new RSVP.Promise();
jQuery.ajax({
$.ajax({
url: "/users/" + username + '.json',
success: function(json) {
// todo: decompose to object
@ -305,7 +305,7 @@ Discourse.User.reopenClass({
},
createAccount: function(name, email, password, username, passwordConfirm, challenge) {
return jQuery.ajax({
return $.ajax({
url: '/users',
dataType: 'json',
data: {

View File

@ -18,7 +18,7 @@ var popstateReady = false;
Ember.DiscourseLocation = Ember.Object.extend({
init: function() {
set(this, 'location', get(this, 'location') || window.location);
if ( jQuery.inArray('state', jQuery.event.props) < 0 )
if ( $.inArray('state', $.event.props) < 0 )
jQuery.event.props.push('state')
this.initState();
},

View File

@ -89,7 +89,7 @@ Discourse.ComposerView = Discourse.View.extend({
// If visible update the text
educationKey = this.get('content.creatingTopic') ? 'new-topic' : 'new-reply';
return jQuery.get("/education/" + educationKey).then(function(result) {
return $.get("/education/" + educationKey).then(function(result) {
return _this.set('educationContents', result);
});
}).observes('controller.hasReply', 'content.creatingTopic', 'Discourse.currentUser.reply_count'),
@ -251,15 +251,11 @@ Discourse.ComposerView = Discourse.View.extend({
});
topic = this.get('topic');
this.editor = editor = Discourse.Markdown.createNewMarkdownEditor(Discourse.Markdown.markdownConverter({
this.editor = editor = Discourse.Markdown.createEditor({
lookupAvatar: function(username) {
return Discourse.Utilities.avatarImg({
username: username,
size: 'tiny'
});
},
sanitize: true
}));
return Discourse.Utilities.avatarImg({ username: username, size: 'tiny' });
}
});
$uploadTarget = $('#reply-control');
this.editor.hooks.insertImageDialog = function(callback) {

View File

@ -53,7 +53,7 @@ Discourse.HeaderView = Discourse.View.extend({
showNotifications: function() {
var _this = this;
jQuery.get("/notifications").then(function(result) {
$.get("/notifications").then(function(result) {
_this.set('notifications', result.map(function(n) {
return Discourse.Notification.create(n);
}));

View File

@ -240,7 +240,7 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({
fetchConfirmationValue: function() {
var _this = this;
return jQuery.ajax({
return $.ajax({
url: '/users/hp.json',
success: function(json) {
_this.set('accountPasswordConfirm', json.value);

View File

@ -16,7 +16,7 @@ Discourse.ForgotPasswordView = Discourse.ModalBodyView.extend({
}).property('accountEmailOrUsername'),
submit: function() {
jQuery.post("/session/forgot_password", {
$.post("/session/forgot_password", {
username: this.get('accountEmailOrUsername')
});
// don't tell people what happened, this keeps it more secure (ensure same on server)

View File

@ -45,7 +45,7 @@ Discourse.LoginView = Discourse.ModalBodyView.extend({
login: function() {
var _this = this;
this.set('loggingIn', true);
jQuery.post("/session", {
$.post("/session", {
login: this.get('loginName'),
password: this.get('loginPassword')
}).success(function(result) {

View File

@ -12,7 +12,7 @@ Discourse.NotActivatedView = Discourse.ModalBodyView.extend({
emailSent: false,
sendActivationEmail: function() {
jQuery.get('/users/' + this.get('username') + '/send_activation_email');
$.get('/users/' + this.get('username') + '/send_activation_email');
this.set('emailSent', true);
}
});

View File

@ -1,4 +1,4 @@
/*global Markdown:true*/
/*global Markdown:true assetPath:true */
/**
A control to support using PageDown as an Ember view.
@ -14,14 +14,13 @@ Discourse.PagedownEditor = Ember.ContainerView.extend({
init: function() {
this._super();
$LAB.script(assetPath('defer/html-sanitizer-bundle'));
// Add a button bar
this.pushObject(Em.View.create({ elementId: 'wmd-button-bar' }));
this.pushObject(Em.TextArea.create({
valueBinding: 'parentView.value',
elementId: 'wmd-input'
}));
this.pushObject(Em.TextArea.create({ valueBinding: 'parentView.value', elementId: 'wmd-input' }));
this.pushObject(Em.View.createWithMixins(Discourse.Presence, {
this.pushObject(Discourse.View.createWithMixins({
elementId: 'wmd-preview',
classNameBindings: [':preview', 'hidden'],
hidden: (function() {
@ -31,12 +30,9 @@ Discourse.PagedownEditor = Ember.ContainerView.extend({
},
didInsertElement: function() {
var $wmdInput;
$wmdInput = $('#wmd-input');
var $wmdInput = $('#wmd-input');
$wmdInput.data('init', true);
this.editor = Discourse.Markdown.createNewMarkdownEditor(Discourse.Markdown.markdownConverter({
sanitize: true
}));
this.editor = Discourse.Markdown.createEditor();
return this.editor.run();
}

View File

@ -190,7 +190,7 @@ Discourse.PostView = Discourse.View.extend({
if ($aside.data('topic')) {
topic_id = $aside.data('topic');
}
jQuery.getJSON("/posts/by_number/" + topic_id + "/" + ($aside.data('post')), function(result) {
$.getJSON("/posts/by_number/" + topic_id + "/" + ($aside.data('post')), function(result) {
var parsed;
parsed = $(result.cooked);
parsed.replaceText(originalText, "<span class='highlighted'>" + originalText + "</span>");

View File

@ -94,7 +94,7 @@ Discourse.SearchView = Discourse.View.extend({
this.currentSearch = null;
}
this.searcher = this.searcher || Discourse.debounce(function(term, typeFilter) {
_this.currentSearch = jQuery.ajax({
_this.currentSearch = $.ajax({
url: '/search',
data: {
term: term,

View File

@ -1023,6 +1023,7 @@
var previewSetter;
var previewSet = function (text) {
if (previewSetter)
return previewSetter(text);

View File

@ -12,7 +12,7 @@ var console = window.console = {};
console.log = console.info = console.warn = console.error = function(){};
// jQuery
var jQuery = window.jQuery = function() { return jQuery; };
var $ = jQuery = window.jQuery = function() { return jQuery; };
jQuery.ready = function() { return jQuery; };
jQuery.inArray = function() { return jQuery; };
jQuery.event = {

View File

@ -12,13 +12,13 @@ describe("Discourse.Onebox", function() {
it("Stops rapid calls with cache true", function() {
Discourse.Onebox.load(anchor, true);
Discourse.Onebox.load(anchor, true);
expect(jQuery.ajax.calls.length).toBe(1);
expect($.ajax.calls.length).toBe(1);
});
it("Stops rapid calls with cache false", function() {
Discourse.Onebox.load(anchor, false);
Discourse.Onebox.load(anchor, false);
expect(jQuery.ajax.calls.length).toBe(1);
expect($.ajax.calls.length).toBe(1);
});
});