Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Chrome App settings for speak and balloons
  • Loading branch information
ToonTalk committed Oct 16, 2016
1 parent a674b38 commit b2fd156
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 55 deletions.
53 changes: 34 additions & 19 deletions support/settings.js
Expand Up @@ -173,26 +173,27 @@ window.TOONTALK.SETTINGS =
var close_button = TT.UTILITIES.create_close_button(close_handler, "Click to close the settings panel.");
var reload_with_speech = TT.UTILITIES.create_check_box(false,
"toontalk-url-parameter-setting",
TT.speak ? "Reload with speaking turned off"
: "Reload with spoken help",
TT.speak ? (TT.CHROME_APP ? "Turn off spoken help" : "Reload with speaking turned off")
: (TT.CHROME_APP ? "Turn on spoken help" : "Reload with spoken help"),
TT.speak ? "Check this if you no longer want spoken help."
: "Check this if you would like ToonTalk to speak to you.");
var reload_with_balloons = TT.UTILITIES.create_check_box(false,
"toontalk-url-parameter-setting",
TT.balloons ? "Reload with no balloon help"
: "Reload with balloon help",
TT.balloons ? (TT.CHROME_APP ? "Turn off help balloons" : "Reload with no balloon help")
: (TT.CHROME_APP ? "Turn on help balloons" : "Reload with balloon help"),
TT.balloons ? "Check this if you no longer want ToonTalk to display balloons giving tips and help."
: "Check this if you would like ToonTalk to display balloons giving tips and help.");
var reload_with_listen = TT.UTILITIES.create_check_box(false,
"toontalk-url-parameter-setting",
TT.listen ? "Reload with voice commands turned off"
: "Reload with <a href='docs/manual/voice-commands.html' target = '_blank'>voice commands</a> turned on",
TT.listen ? (TT.CHROME_APP ? "Turn off voice commands" : "Reload with voice commands turned off")
: (TT.CHROME_APP ? "Turn on voice commands"
: "Reload with <a href='docs/manual/voice-commands.html' target = '_blank'>voice commands</a> turned on"),
TT.listen ? "Check this if you no longer want ToonTalk to listen to voice commands."
: "Check this if you would like ToonTalk to listen for voice commadns.");
var reload_with_translate = TT.UTILITIES.create_check_box(false,
"toontalk-url-parameter-setting",
TT.TRANSLATION_ENABLED ? "Reload with no translation from English"
: "Reload with with over one hundred languages that ToonTalk can be translated to",
TT.TRANSLATION_ENABLED ? (TT.CHROME_APP ? "Turn off translation from English" : "Reload with no translation from English")
: (TT.CHROME_APP ? "Turn on translation" : "Reload with over one hundred languages that ToonTalk can be translated to"),
TT.TRANSLATION_ENABLED ? "Check this if you no longer want ToonTalk to display a choice of languages."
: "Check this if you would like ToonTalk to display a menu of languages for the interface to be translated to.");
var heading = TT.UTILITIES.create_text_element("Saving and loading options");
Expand Down Expand Up @@ -313,11 +314,23 @@ window.TOONTALK.SETTINGS =
});
};
var publish_and_as_workspace = TT.UTILITIES.create_vertical_table(publish, as_workspace.container);
var reload_listenter_function = function (parameter_name, current_value) {
var reload_listener_function = function (parameter_name, current_value) {
return function () {
window.location.assign(TT.UTILITIES.add_URL_parameter(window.location.href, parameter_name, current_value ? '0' : '1'));
};
}
var change_setting_listener_function = function (parameter) {
return function () {
TT.UTILITIES.set_parameter(parameter, !TT[parameter]);
}
};
var setting_listener_function = function (url_parameter, toontalk_parameter) {
if (TT.CHROME_APP) {
return change_setting_listener_function(toontalk_parameter);
} else {
return reload_listener_function(url_parameter, TT[toontalk_parameter]);
}
}
var $row = $(program_name.container).children("tr");
$(settings_panel).addClass("toontalk-settings-panel")
.css({width: $(widget_element).width() +29,
Expand All @@ -328,10 +341,10 @@ window.TOONTALK.SETTINGS =
"z-index": 9999999});
settings_panel.appendChild(close_button);
program_name.button.addEventListener('change', program_name_changed);
reload_with_speech.button .addEventListener('click', reload_listenter_function('speak', TT.speak));
reload_with_listen.button .addEventListener('click', reload_listenter_function('listen', TT.listen));
reload_with_balloons.button .addEventListener('click', reload_listenter_function('balloons', TT.balloons));
reload_with_translate.button.addEventListener('click', reload_listenter_function('translate', TT.TRANSLATION_ENABLED));
reload_with_speech.button .addEventListener('click', setting_listener_function('speak', 'speak'));
reload_with_listen.button .addEventListener('click', setting_listener_function('listen', 'listen'));
reload_with_balloons.button .addEventListener('click', setting_listener_function('balloons', 'balloons'));
reload_with_translate.button.addEventListener('click', setting_listener_function('translate', 'TRANSLATION_ENABLED'));
save_to_google_drive.button.addEventListener('click',
function (event) {
// if turning off auto-saving save one last time
Expand Down Expand Up @@ -409,12 +422,14 @@ window.TOONTALK.SETTINGS =
$(heading).css({"font-weight": 'bold',
"font-size": 24,
"color": "navy"});
if (!TT.CHROME_APP) {
contents_div.appendChild(reload_with_speech.container);
contents_div.appendChild(reload_with_balloons.container);
contents_div.appendChild(reload_with_listen.container);
contents_div.appendChild(reload_with_translate.container);
}
contents_div.appendChild(reload_with_speech.container);
contents_div.appendChild(reload_with_balloons.container);
if (!TT.CHROME_APP) {
// not clear why the following didn't work in Chrome App -- no results when speaking -- permissions documention doesn't metnion this
contents_div.appendChild(reload_with_listen.container);
// got various security errors trying to enable translate in Chrome App
contents_div.appendChild(reload_with_translate.container);
}
contents_div.appendChild(heading);
contents_div.appendChild(program_name.container);
if (!TT.CHROME_APP) {
Expand Down
85 changes: 50 additions & 35 deletions support/utilities.js
Expand Up @@ -78,6 +78,46 @@ window.TOONTALK.UTILITIES =
}
});
});
var enable_translation = function () {
var translation_observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
var translation_element = $(mutation.target).closest(".toontalk-translation-element").get(0);
if (translation_element && translation_element.toontalk_callback) {
translation_element.toontalk_callback(translation_element.innerText);
translation_element.innerText = '';
translation_element.toontalk_callback = undefined;
}
});
});
var translation_div, translation_element;
$("a").each(function (index, element) {
element.href = utilities.add_URL_parameter(element.href, "translate", "1");
});
if (!$("#google_translate_element").is("*")) {
// if one wasn't added to the page then add it at the top of the body
translation_div = document.createElement("div");
translation_div.id = "google_translate_element";
document.body.insertBefore(translation_div, document.body.firstChild);
}
document.head.appendChild($('<meta name="google-translate-customization" content="7e20c0dc38d147d6-a2c819007bfac9d1-gc84ee27cc12fd5d1-1b"></meta>')[0]);
if (!TT.CHROME_APP) {
// tried to load it since the following triggers Chrome App errors but so did loading it earlier
load_script("https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");
}
// need an element that triggers Google translate to speak arbitrary text
translation_element = document.createElement('div');
translation_element.className = 'toontalk-translation-element';
document.body.appendChild(translation_element);
translation_observer.observe(translation_element, {characterData: true,
subtree: true});
utilities.translate = function (text, callback) {
var original;
translation_element.innerHTML = text;
original = translation_element.innerText;
translation_element.toontalk_callback = callback;
};
};

var translate = function (element, translate_attribute, scale_attribute) {
var translation, ancestor;
if (!element) {
Expand Down Expand Up @@ -5157,6 +5197,13 @@ Edited by Ken Kahn for better integration with the rest of the ToonTalk code
xhr.send();
};

utilities.set_parameter = function (parameter_name, value) {
TT[parameter_name] = value;
if (parameter_name === 'TRANSLATION_ENABLED' && value) {
enable_translation();
}
};


// for comparison with the above (which handles much bigger numbers than this)
// it does differ in whether it should be Duotrigintillion or Dotrigintillion -- see http://mathforum.org/library/drmath/view/57227.html
Expand Down Expand Up @@ -5202,16 +5249,6 @@ Edited by Ken Kahn for better integration with the rest of the ToonTalk code
// return iter('')(0)(grp(String(n)))(rem(String(n)));
// };
utilities.initialize = function (callback) {
var translation_observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
var translation_element = $(mutation.target).closest(".toontalk-translation-element").get(0);
if (translation_element && translation_element.toontalk_callback) {
translation_element.toontalk_callback(translation_element.innerText);
translation_element.innerText = '';
translation_element.toontalk_callback = undefined;
}
});
});
var add_help_buttons = function () {
var add_button_or_link = function (id, url, label, title, css) {
var element = document.getElementById(id);
Expand Down Expand Up @@ -5311,29 +5348,7 @@ Edited by Ken Kahn for better integration with the rest of the ToonTalk code
}
TT.TRANSLATION_ENABLED = utilities.get_current_url_boolean_parameter("translate", false);
if (TT.TRANSLATION_ENABLED) {
$("a").each(function (index, element) {
element.href = utilities.add_URL_parameter(element.href, "translate", "1");
});
if (!$("#google_translate_element").is("*")) {
// if one wasn't added to the page then add it at the top of the body
translation_div = document.createElement("div");
translation_div.id = "google_translate_element";
document.body.insertBefore(translation_div, document.body.firstChild);
}
document.head.appendChild($('<meta name="google-translate-customization" content="7e20c0dc38d147d6-a2c819007bfac9d1-gc84ee27cc12fd5d1-1b"></meta>')[0]);
load_script("https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");
// need an element that triggers Google translate to speak arbitrary text
translation_element = document.createElement('div');
translation_element.className = 'toontalk-translation-element';
document.body.appendChild(translation_element);
translation_observer.observe(translation_element, {characterData: true,
subtree: true});
utilities.translate = function (text, callback) {
var original;
translation_element.innerHTML = text;
original = translation_element.innerText;
translation_element.toontalk_callback = callback;
};
enable_translation();
} else {
$("#google_translate_element").remove();
}
Expand Down Expand Up @@ -5415,7 +5430,7 @@ Edited by Ken Kahn for better integration with the rest of the ToonTalk code
toontalk_initialized = true;
document.dispatchEvent(TT.UTILITIES.create_event('toontalk_initialized', {}));
}
var document_click, translation_div, translation_element, $saved_selection;
var document_click, $saved_selection;
if (toontalk_initialized) {
return;
}
Expand All @@ -5424,7 +5439,7 @@ Edited by Ken Kahn for better integration with the rest of the ToonTalk code
} else {
continue_initialization();
}
};
};

utilities.do_after_initialization = function (callback) {
if (toontalk_initialized) {
Expand Down
6 changes: 5 additions & 1 deletion toontalk.js
Expand Up @@ -226,6 +226,10 @@ if (published_page) {
add_css("https://dl.dropboxusercontent.com/u/51973316/ToonTalk/libraries/froala-wysiwyg-editor/css/froala_editor.min.css");
}

// if (TOONTALK.CHROME_APP) {
// file_names.push("libraries/translate_a/element.js?cb=googleTranslateElementInit");
// }

loadFile(0, TOONTALK.RUNNING_LOCALLY);

}());
}());

0 comments on commit b2fd156

Please sign in to comment.