Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
Chi-En Wu committed Oct 22, 2013
2 parents 830953b + 5f1f62c commit a352032
Show file tree
Hide file tree
Showing 10 changed files with 560 additions and 656 deletions.
Binary file modified MusicTube.crx
Binary file not shown.
2 changes: 1 addition & 1 deletion src/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "MusicTube",
"version": "1.1.6",
"version": "1.1.7",
"manifest_version": 2,
"description": "Plays YouTube music in your web browser.",
"update_url": "https://raw.github.com/jason2506/MusicTube/master/updates.xml",
Expand Down
2 changes: 1 addition & 1 deletion src/scripts/background.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
chrome.extension.onRequest.addListener(function(request, sender, callback) {
if (request.title != undefined)
if (typeof request.title !== 'undefined')
player.add(request.id, request.title);
else if (player.contains(request.id))
callback();
Expand Down
104 changes: 53 additions & 51 deletions src/scripts/contentscript.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,60 @@
(function() {
var id = window.location.search.split('v=')[1].split('&')[0];
var added = false;

$(document).ready(function() {
var button = $('<button>')
.click(add)
.addClass('yt-uix-button')
.addClass('yt-uix-button-subscribe-branded')
.attr({
'type': 'button',
'role': 'button'
})
.css({
'height': '24px',
'padding': '0 6px'
})
.append($('<span>')
.addClass('yt-uix-button-icon-wrapper'))
.append($('<span>')
.text('Add to MusicTube')
.addClass('yt-uix-button-content'))
.css({ 'padding': '0 6px' });

chrome.extension.sendRequest({ 'id': id }, function() {
added = true;
appendAddedStyle(button);
});

$('#watch7-views-info').before($('<span>')
.addClass('yt-uix-button-context-light')
.css({ 'margin-left': '10px' })
.append(button));
});

function appendAddedStyle(button) {
button
.removeClass('yt-uix-button-subscribe-branded')
.addClass('yt-uix-button-subscribed-branded');
var id = window.location.search.split('v=')[1].split('&')[0];
var added = false;

$(document).ready(function() {
var button = $('<button>')
.click(add)
.addClass('yt-uix-button')
.addClass('yt-uix-button-subscribe-branded')
.attr({
'type': 'button',
'role': 'button'
})
.css({
'height': '24px',
'padding': '0 6px'
})
.append($('<span>')
.addClass('yt-uix-button-icon-wrapper'))
.append($('<span>')
.text('Add to MusicTube')
.addClass('yt-uix-button-content'))
.css({ 'padding': '0 6px' });

chrome.extension.sendRequest({ 'id': id }, function() {
added = true;
appendAddedStyle(button);
});

var bgUrl = 'http://s.ytimg.com/yts/imgbin/www-hitchhiker-vflmnaCdT.png';
var successImg = $('<img>')
.addClass('yt-uix-button-icon yt-uix-button-icon-subscribe')
.attr('src', 'http://s.ytimg.com/yts/img/pixel-vfl3z5WfW.gif');
button.find('.yt-uix-button-icon-wrapper').append(successImg);
$('#watch7-views-info').before($('<span>')
.addClass('yt-uix-button-context-light')
.css({ 'margin-left': '10px' })
.append(button));
});

function appendAddedStyle(button) {
button
.removeClass('yt-uix-button-subscribe-branded')
.addClass('yt-uix-button-subscribed-branded');

var bgUrl = 'http://s.ytimg.com/yts/imgbin/www-hitchhiker-vflmnaCdT.png';
var successImg = $('<img>')
.addClass('yt-uix-button-icon yt-uix-button-icon-subscribe')
.attr('src', 'http://s.ytimg.com/yts/img/pixel-vfl3z5WfW.gif');
button.find('.yt-uix-button-icon-wrapper').append(successImg);
}

function add(event) {
var title = $('meta[name="title"]').attr('content');
chrome.extension.sendRequest({id: id, title: title});

if (!added) {
added = true;
appendAddedStyle($(this));
}
}

function add(event) {
var title = $('meta[name="title"]').attr('content');
chrome.extension.sendRequest({id: id, title: title});

if (!added) {
added = true;
appendAddedStyle($(this));
}
}
})();

117 changes: 6 additions & 111 deletions src/scripts/jquery-ui-custom.js

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions src/scripts/jquery.js

Large diffs are not rendered by default.

194 changes: 98 additions & 96 deletions src/scripts/options.js
Original file line number Diff line number Diff line change
@@ -1,108 +1,110 @@
(function() {
var bgPage = chrome.extension.getBackgroundPage();
var player = bgPage.player;
var componments = {
sidebarItems: $('#sidebar li'),

playmodeSelectors: $('input[name=playmode]:radio'),

importResultMsg: $('#import-export-page .msg'),
importTextarea: $('#import'),
importButton: $('#submit-import'),
exportTextarea: $('#export'),
exportButton: $('#refresh-export')
};

/*
* Sidebar Control
*/
componments.sidebarItems.click(function() {
$('.current').removeClass('current');

var targetId = $(this).attr('rel');
$(this).addClass('current');
$('#' + targetId).addClass('current');
});

$(componments.sidebarItems[0]).click();

/*
* Player Options
*/
componments.playmodeSelectors.each(function() {
var mode = player.playmode();
if ($(this).val() === mode)
$(this).attr('checked', 'true');
});

componments.playmodeSelectors.click(function() {
var mode = $(this).val();
player.playmode(mode);
});

/*
* Export / Import
*/
exportPlaylist();
componments.importButton.click(importPlaylist);
componments.exportButton.click(exportPlaylist);

function importPlaylist() {
var msg = componments.importResultMsg;
msg.removeClass('success error');

var json = componments.importTextarea.val();
var result;
try {
result = JSON.parse(json);
}
catch (error) {

var bgPage = chrome.extension.getBackgroundPage();
var player = bgPage.player;
var componments = {
sidebarItems: $('#sidebar li'),

playmodeSelectors: $('input[name=playmode]:radio'),

importResultMsg: $('#import-export-page .msg'),
importTextarea: $('#import'),
importButton: $('#submit-import'),
exportTextarea: $('#export'),
exportButton: $('#refresh-export')
};

/*
* Sidebar Control
*/
componments.sidebarItems.click(function() {
$('.current').removeClass('current');

var targetId = $(this).attr('rel');
$(this).addClass('current');
$('#' + targetId).addClass('current');
});

$(componments.sidebarItems[0]).click();

/*
* Player Options
*/
componments.playmodeSelectors.each(function() {
var mode = player.playmode();
if ($(this).val() === mode)
$(this).attr('checked', 'true');
});

componments.playmodeSelectors.click(function() {
var mode = $(this).val();
player.playmode(mode);
});

/*
* Export / Import
*/
exportPlaylist();
componments.importButton.click(importPlaylist);
componments.exportButton.click(exportPlaylist);

function importPlaylist() {
var msg = componments.importResultMsg;
msg.removeClass('success error');

var json = componments.importTextarea.val();
var result;
try {
result = JSON.parse(json);
}
catch (error) {
msg.addClass('error')
.text('The imported text is not a valid JSON string.');
return;
}

if (!$.isArray(result)) {
msg.addClass('error')
.text('The imported object is not a array of video id-title pair.');
return;
}

const idPattern = /^[a-zA-Z0-9\-_]{11}$/;
var playlist = [];
for (var index = 0; index < result.length; index++)
{
var id = result[index].id;
var title = result[index].title;

if (typeof id !== 'string') {
msg.addClass('error')
.text('The imported text is not a valid JSON string.');
.text('The video id "' + id + '" is not a string.');
return;
}

if (!$.isArray(result)) {
else if (!idPattern.test(id)) {
msg.addClass('error')
.text('The imported object is not a array of video id-title pair.');
.text('"' + id + '" is not a valid video id.');
return;
}

const idPattern = /^[a-zA-Z0-9\-_]{11}$/;
var playlist = [];
for (var index = 0; index < result.length; index++)
{
var id = result[index].id;
var title = result[index].title;

if (typeof id !== 'string') {
msg.addClass('error')
.text('The video id "' + id + '" is not a string.');
return;
}
else if (!idPattern.test(id)) {
msg.addClass('error')
.text('"' + id + '" is not a valid video id.');
return;
}
else if (typeof title !== 'string' || title.length === 0) {
msg.addClass('error')
.text('The video title is not valid.');
return;
}

playlist.push({
id: result[index].id,
title: result[index].title
});
else if (typeof title !== 'string' || title.length === 0) {
msg.addClass('error')
.text('The video title is not valid.');
return;
}

player.import(playlist);
msg.addClass('success').text('Import successful.');
playlist.push({
id: result[index].id,
title: result[index].title
});
}

function exportPlaylist() {
var json = JSON.stringify(player.playlist);
componments.exportTextarea.val(json);
}
player.import(playlist);
msg.addClass('success').text('Import successful.');
}

function exportPlaylist() {
var json = JSON.stringify(player.playlist);
componments.exportTextarea.val(json);
}

})();
Loading

0 comments on commit a352032

Please sign in to comment.