diff --git a/services/web/app/views/translations/translation_message.jade b/services/web/app/views/translations/translation_message.jade index c7c8054460..12b600f0a2 100644 --- a/services/web/app/views/translations/translation_message.jade +++ b/services/web/app/views/translations/translation_message.jade @@ -1,10 +1,11 @@ - if(typeof(recomendSubdomain) != "undefined") - .translations-message - .container - .row - .col-md-12 - a(href=recomendSubdomain.url) #{translate("click_here_to_view_sl_in_lng", {lngName:translate(recomendSubdomain.lngCode)})} - img(src="/img/flags/32/#{recomendSubdomain.lngCode}.png") - button.close - span(aria-hidden="true") × - span.sr-only Close \ No newline at end of file + span(ng-controller="TranslationsPopupController", ng-cloak) + .translations-message(ng-hide="hidei18nNotification") + .container + .row + .col-md-12 + a(href=recomendSubdomain.url) #{translate("click_here_to_view_sl_in_lng", {lngName:translate(recomendSubdomain.lngCode)})} + img(src="/img/flags/32/#{recomendSubdomain.lngCode}.png") + button.close + span(aria-hidden="true", ng-click="dismiss()") × + span.sr-only Close \ No newline at end of file diff --git a/services/web/public/coffee/base.coffee b/services/web/public/coffee/base.coffee index 90d522ead8..48d668e2c5 100644 --- a/services/web/public/coffee/base.coffee +++ b/services/web/public/coffee/base.coffee @@ -10,6 +10,7 @@ define [ "ng-context-menu" "underscore" "ngSanitize" + "ngCookies" ]) return App \ No newline at end of file diff --git a/services/web/public/coffee/libs.coffee b/services/web/public/coffee/libs.coffee index b25e273586..4d2b6c3438 100644 --- a/services/web/public/coffee/libs.coffee +++ b/services/web/public/coffee/libs.coffee @@ -8,4 +8,5 @@ define [ "libs/jquery.storage" "libs/fineuploader" "libs/angular-sanitize-1.2.17" + "libs/angular-cookies-1.2.22" ], () -> diff --git a/services/web/public/coffee/main.coffee b/services/web/public/coffee/main.coffee index da6e361893..874a3b808c 100644 --- a/services/web/public/coffee/main.coffee +++ b/services/web/public/coffee/main.coffee @@ -9,6 +9,7 @@ define [ "main/event-tracking" "main/bonus" "main/system-messages" + "main/translations" "directives/asyncForm" "directives/stopPropagation" "directives/focus" diff --git a/services/web/public/coffee/main/translations.coffee b/services/web/public/coffee/main/translations.coffee new file mode 100644 index 0000000000..ef4cec89b7 --- /dev/null +++ b/services/web/public/coffee/main/translations.coffee @@ -0,0 +1,10 @@ +define [ + "base" +], (App) -> + App.controller "TranslationsPopupController", ($scope, $cookies) -> + + $scope.hidei18nNotification = $cookies.hidei18nNotification + + $scope.dismiss = -> + $cookies.hidei18nNotification = true + $scope.hidei18nNotification = $cookies.hidei18nNotification diff --git a/services/web/public/js/libs/angular-cookies-1.2.22.js b/services/web/public/js/libs/angular-cookies-1.2.22.js new file mode 100644 index 0000000000..80e2b17d82 --- /dev/null +++ b/services/web/public/js/libs/angular-cookies-1.2.22.js @@ -0,0 +1,206 @@ +/** + * @license AngularJS v1.2.22 + * (c) 2010-2014 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +/** + * @ngdoc module + * @name ngCookies + * @description + * + * # ngCookies + * + * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies. + * + * + *
+ * + * See {@link ngCookies.$cookies `$cookies`} and + * {@link ngCookies.$cookieStore `$cookieStore`} for usage. + */ + + +angular.module('ngCookies', ['ng']). + /** + * @ngdoc service + * @name $cookies + * + * @description + * Provides read/write access to browser's cookies. + * + * Only a simple Object is exposed and by adding or removing properties to/from this object, new + * cookies are created/deleted at the end of current $eval. + * The object's properties can only be strings. + * + * Requires the {@link ngCookies `ngCookies`} module to be installed. + * + * @example + * + * ```js + * angular.module('cookiesExample', ['ngCookies']) + * .controller('ExampleController', ['$cookies', function($cookies) { + * // Retrieving a cookie + * var favoriteCookie = $cookies.myFavorite; + * // Setting a cookie + * $cookies.myFavorite = 'oatmeal'; + * }]); + * ``` + */ + factory('$cookies', ['$rootScope', '$browser', function ($rootScope, $browser) { + var cookies = {}, + lastCookies = {}, + lastBrowserCookies, + runEval = false, + copy = angular.copy, + isUndefined = angular.isUndefined; + + //creates a poller fn that copies all cookies from the $browser to service & inits the service + $browser.addPollFn(function() { + var currentCookies = $browser.cookies(); + if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl + lastBrowserCookies = currentCookies; + copy(currentCookies, lastCookies); + copy(currentCookies, cookies); + if (runEval) $rootScope.$apply(); + } + })(); + + runEval = true; + + //at the end of each eval, push cookies + //TODO: this should happen before the "delayed" watches fire, because if some cookies are not + // strings or browser refuses to store some cookies, we update the model in the push fn. + $rootScope.$watch(push); + + return cookies; + + + /** + * Pushes all the cookies from the service to the browser and verifies if all cookies were + * stored. + */ + function push() { + var name, + value, + browserCookies, + updated; + + //delete any cookies deleted in $cookies + for (name in lastCookies) { + if (isUndefined(cookies[name])) { + $browser.cookies(name, undefined); + } + } + + //update all cookies updated in $cookies + for(name in cookies) { + value = cookies[name]; + if (!angular.isString(value)) { + value = '' + value; + cookies[name] = value; + } + if (value !== lastCookies[name]) { + $browser.cookies(name, value); + updated = true; + } + } + + //verify what was actually stored + if (updated){ + updated = false; + browserCookies = $browser.cookies(); + + for (name in cookies) { + if (cookies[name] !== browserCookies[name]) { + //delete or reset all cookies that the browser dropped from $cookies + if (isUndefined(browserCookies[name])) { + delete cookies[name]; + } else { + cookies[name] = browserCookies[name]; + } + updated = true; + } + } + } + } + }]). + + + /** + * @ngdoc service + * @name $cookieStore + * @requires $cookies + * + * @description + * Provides a key-value (string-object) storage, that is backed by session cookies. + * Objects put or retrieved from this storage are automatically serialized or + * deserialized by angular's toJson/fromJson. + * + * Requires the {@link ngCookies `ngCookies`} module to be installed. + * + * @example + * + * ```js + * angular.module('cookieStoreExample', ['ngCookies']) + * .controller('ExampleController', ['$cookieStore', function($cookieStore) { + * // Put cookie + * $cookieStore.put('myFavorite','oatmeal'); + * // Get cookie + * var favoriteCookie = $cookieStore.get('myFavorite'); + * // Removing a cookie + * $cookieStore.remove('myFavorite'); + * }]); + * ``` + */ + factory('$cookieStore', ['$cookies', function($cookies) { + + return { + /** + * @ngdoc method + * @name $cookieStore#get + * + * @description + * Returns the value of given cookie key + * + * @param {string} key Id to use for lookup. + * @returns {Object} Deserialized cookie value. + */ + get: function(key) { + var value = $cookies[key]; + return value ? angular.fromJson(value) : value; + }, + + /** + * @ngdoc method + * @name $cookieStore#put + * + * @description + * Sets a value for given cookie key + * + * @param {string} key Id for the `value`. + * @param {Object} value Value to be stored. + */ + put: function(key, value) { + $cookies[key] = angular.toJson(value); + }, + + /** + * @ngdoc method + * @name $cookieStore#remove + * + * @description + * Remove given cookie + * + * @param {string} key Id of the key-value pair to delete. + */ + remove: function(key) { + delete $cookies[key]; + } + }; + + }]); + + +})(window, window.angular); \ No newline at end of file