|
|
-{"version":3,"sources":["misago.js"],"names":["window","Misago","ns","Object","getPrototypeOf","this","self","preloaded_data","SETTINGS","_services","addService","name","factory","order","push","item","after","get","before","_initServices","services","ordered_services","OrderedList","forEach","undefined","service_instance","_destroyServices","reverse","destroy","registerCoreServices","Conf","RouterFactory","Outlet","component","arguments_array","i","arguments","length","m","apply","_outlet","init","outlet","ForumLayout","view","ctrl","_","ForumNavbar","prototype","desktop_navbar","settings","forum_branding_display","href","router","url","src","static_url","alt","forum_name","forum_branding_text","mount","document","getElementById","prefixUrl","prefix","Router","base_url","$","attr","media_url","has","obj","key","hasOwnProperty","value","pop","returnValue","items","is_ordered","_items","add","values","values_only","_order","unordered","insertItem","insertAt","ordering","indexOf","ordered","splice","index","iterations"],"mappings":"CAEC,WACC,YAEAA,QAAOC,OAAS,WAEd,GAAIC,GAAKC,OAAOC,eAAeC,MAC3BC,EAAOD,IAGXA,MAAKE,gBAEHC,aAIFH,KAAKI,aACLJ,KAAKK,WAAa,SAASC,EAAMC,EAASC,GACxCR,KAAKI,UAAUK,MACbH,KAAMA,EACNI,KAAMH,EACNI,MAAOX,KAAKY,IAAIJ,EAAO,SACvBK,OAAQb,KAAKY,IAAIJ,EAAO,aAI5BR,KAAKc,cAAgB,SAASC,GAC5B,GAAIC,GAAmB,GAAInB,GAAGoB,YAAYF,GAAUP,OAAM,EAC1DQ,GAAiBE,QAAQ,SAAUR,GACjC,GAAIH,GAAU,IAEZA,GADwBY,SAAtBT,EAAKA,KAAKH,QACFG,EAAKA,KAAKH,QAEVG,EAAKA,IAGjB,IAAIU,GAAmBb,EAAQN,EAC3BmB,KACFnB,EAAKS,EAAKJ,MAAQc,MAKxBpB,KAAKqB,iBAAmB,SAASN,GAC/B,GAAIC,GAAmB,GAAInB,GAAGoB,YAAYF,GAAUP,OACpDQ,GAAiBM,UACjBN,EAAiBE,QAAQ,SAAUR,GACZS,SAAjBT,EAAKa,SACPb,EAAKa,QAAQtB,MAKnBD,KAAKwB,qBAAuB,WAC1BxB,KAAKK,WAAW,OAAQR,EAAG4B,MAC3BzB,KAAKK,WAAW,SAAUR,EAAG6B,eAC7B1B,KAAKK,WAAW,SAAUR,EAAG8B,SAI/B3B,KAAK4B,UAAY,WAEf,IAAK,GADDC,MACKC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,GAAK,EACzCD,EAAgBpB,KAAKsB,UAAUD,GAOjC,OAJID,GAAgBA,EAAgBG,OAAS,KAAOhC,MAClD6B,EAAgBpB,KAAKT,MAGhBiC,EAAEL,UAAUM,MAAMf,OAAWU,IAItC7B,KAAKmC,QAAU,KACfnC,KAAKoC,KAAO,SAASC,GACnBrC,KAAKmC,QAAUE,GAAU,KACzBrC,KAAKc,cAAcd,KAAKI,YAG1BJ,KAAKuB,QAAU,WACbvB,KAAKqB,wBAKV,SAAUxB,GACT,YAEAA,GAAGyC,aACDC,KAAM,SAASC,EAAMC,GACnB,OACEA,EAAEb,UAAU/B,EAAG6C,iBAIrB9C,OAAO+C,WAER,SAAU9C,GACT,YAEAA,GAAG6C,aACDH,KAAM,SAASC,EAAMC,GACnB,GAAIG,KAcJ,OAZIH,GAAEI,SAASC,wBACbF,EAAenC,KACbwB,EAAE,kBAAmBc,KAAMN,EAAEO,OAAOC,IAAI,kBACtChB,EAAE,OACAiB,IAAKT,EAAEO,OAAOG,WAAW,4BACzBC,IAAKX,EAAEI,SAASQ,aAElBZ,EAAEI,SAASS,uBAKVrB,EAAE,kEACPA,EAAE,iCAAkCW,QAI1ChD,OAAO+C,WAER,SAAU9C,GACT,YAEAA,GAAG4B,KAAO,SAASgB,GACjBA,EAAEI,SAAWJ,EAAE7B,IAAI6B,EAAEvC,eAAgB,iBAEvCN,OAAO+C,WAER,SAAU9C,GACT,YAEAA,GAAG8B,QACDpB,QAAS,SAASkC,GACZA,EAAEN,SACJF,EAAEsB,MAAMC,SAASC,eAAehB,EAAEN,SAC1BM,EAAEb,UAAU/B,EAAGyC,eAI3Bf,QAAS,SAASkB,GACZA,EAAEN,SACJF,EAAEsB,MAAMd,EAAEN,QAAS,SAIzBvC,OAAO+C,WAER,SAAU9C,GACT,YAEA,IAAI6D,GAAY,SAASC,GACvB,MAAO,UAASV,GACd,MAAOU,GAASV,IAIhBW,EAAS,SAASnB,GACpBzC,KAAK6D,SAAWC,EAAE,QAAQC,KAAK,QAG/B/D,KAAKmD,WAAaO,EAAUjB,EAAE7B,IAAI6B,EAAEvC,eAAgB,aAAc,MAClEF,KAAKgE,UAAYN,EAAUjB,EAAE7B,IAAI6B,EAAEvC,eAAgB,YAAa,MAGlEL,GAAG6B,cAAgB,SAASe,GAC1B,MAAO,IAAImB,GAAOnB,KAEpB7C,OAAO+C,WAER,SAAU9C,GACT,YAEAA,GAAGoE,IAAM,SAASC,EAAKC,GACrB,MAAYhD,UAAR+C,EACKA,EAAIE,eAAeD,IAEnB,GAIXtE,EAAGe,IAAM,SAASsD,EAAKC,EAAKE,GAC1B,MAAIxE,GAAGoE,IAAIC,EAAKC,GACPD,EAAIC,GACQhD,SAAVkD,EACFA,EAEAlD,QAIXtB,EAAGyE,IAAM,SAASJ,EAAKC,EAAKE,GAC1B,GAAIE,GAAc1E,EAAGe,IAAIsD,EAAKC,EAAKE,EAInC,OAHIxE,GAAGoE,IAAIC,EAAKC,UACPD,GAAIC,GAENI,IAET3E,OAAO+C,WAER,SAAU9C,GACT,YAEAA,GAAGoB,YAAc,SAASuD,GACxBxE,KAAKyE,YAAa,EAClBzE,KAAK0E,OAASF,MAEdxE,KAAK2E,IAAM,SAASR,EAAKzD,EAAMF,GAC7BR,KAAK0E,OAAOjE,MACV0D,IAAKA,EACLzD,KAAMA,EACNC,MAAOd,EAAGe,IAAIJ,EAAO,SACrBK,OAAQhB,EAAGe,IAAIJ,EAAO,aAI1BR,KAAKY,IAAM,SAASuD,EAAKE,GACvB,IAAK,GAAIvC,GAAI,EAAGA,EAAI9B,KAAK0E,OAAO1C,OAAQF,IACtC,GAAI9B,KAAK0E,OAAO5C,GAAGqC,MAAQA,EACzB,MAAOnE,MAAK0E,OAAO5C,GAAGpB,IAI1B,OAAO2D,IAGTrE,KAAKiE,IAAM,SAASE,GAClB,MAAyBhD,UAAlBnB,KAAKY,IAAIuD,IAGlBnE,KAAK4E,OAAS,WAEZ,IAAK,GADDA,MACK9C,EAAI,EAAGA,EAAI9B,KAAK0E,OAAO1C,OAAQF,IACtC8C,EAAOnE,KAAKT,KAAK0E,OAAO5C,GAAGpB,KAE7B,OAAOkE,IAGT5E,KAAKQ,MAAQ,SAASqE,GAMpB,MALK7E,MAAKyE,aACRzE,KAAK0E,OAAS1E,KAAK8E,OAAO9E,KAAK0E,QAC/B1E,KAAKyE,YAAa,GAGhBI,GAAsC,mBAAhBA,GACjB7E,KAAK4E,SAEL5E,KAAK0E,QAIhB1E,KAAK8E,OAAS,SAASC,GAuBrB,QAASC,GAAWtE,GAClB,GAAIuE,GAAW,EACoB,MAA/BC,EAASC,QAAQzE,EAAKyD,OACpBzD,EAAKC,OACPsE,EAAWC,EAASC,QAAQzE,EAAKC,OAChB,KAAbsE,IACFA,GAAY,IAELvE,EAAKG,SACdoE,EAAWC,EAASC,QAAQzE,EAAKG,SAGlB,KAAboE,IACFG,EAAQC,OAAOJ,EAAU,EAAGvE,GAC5BwE,EAASG,OAAOJ,EAAU,EAAGvE,EAAKyD,OAnCxC,GAAImB,KACJP,GAAU7D,QAAQ,SAAUR,GAC1B4E,EAAM7E,KAAKC,EAAKyD,MAIlB,IAAIiB,MACAF,IAIJH,GAAU7D,QAAQ,SAAUR,GACrBA,EAAKC,OAAUD,EAAKG,SACvBuE,EAAQ3E,KAAKC,GACbwE,EAASzE,KAAKC,EAAKyD,OA2BvB,KADA,GAAIoB,GAAa,IACVA,EAAa,GAAKD,EAAMtD,SAAWkD,EAASlD,QACjDuD,GAAc,EACdR,EAAU7D,QAAQ8D,EAGpB,OAAOI,MAGVxF,OAAO+C","file":"misago.js","sourcesContent":["/* global -Misago */\n/* exported Misago */\n(function () {\n 'use strict';\n\n window.Misago = function() {\n\n var ns = Object.getPrototypeOf(this);\n var self = this;\n\n // Preloaded data\n this.preloaded_data = {\n // Empty settings\n SETTINGS: {}\n };\n\n // Services\n this._services = [];\n this.addService = function(name, factory, order) {\n this._services.push({\n name: name,\n item: factory,\n after: this.get(order, 'after'),\n before: this.get(order, 'before')\n });\n };\n\n this._initServices = function(services) {\n var ordered_services = new ns.OrderedList(services).order(false);\n ordered_services.forEach(function (item) {\n var factory = null;\n if (item.item.factory !== undefined) {\n factory = item.item.factory;\n } else {\n factory = item.item;\n }\n\n var service_instance = factory(self);\n if (service_instance) {\n self[item.name] = service_instance;\n }\n });\n };\n\n this._destroyServices = function(services) {\n var ordered_services = new ns.OrderedList(services).order();\n ordered_services.reverse();\n ordered_services.forEach(function (item) {\n if (item.destroy !== undefined) {\n item.destroy(self);\n }\n });\n };\n\n this.registerCoreServices = function() {\n this.addService('conf', ns.Conf);\n this.addService('router', ns.RouterFactory);\n this.addService('outlet', ns.Outlet);\n };\n\n // Component factory\n this.component = function() {\n var arguments_array = [];\n for (var i = 0; i < arguments.length; i += 1) {\n arguments_array.push(arguments[i]);\n }\n\n if (arguments_array[arguments_array.length - 1] !== this) {\n arguments_array.push(this);\n }\n\n return m.component.apply(undefined, arguments_array);\n };\n\n // App ini/destory\n this._outlet = null;\n this.init = function(outlet) {\n this._outlet = outlet || null;\n this._initServices(this._services);\n };\n\n this.destroy = function() {\n this._destroyServices();\n };\n };\n}());\n\n(function (ns) {\n 'use strict';\n\n ns.ForumLayout = {\n view: function(ctrl, _) {\n return [\n _.component(ns.ForumNavbar)\n ];\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.ForumNavbar = {\n view: function(ctrl, _) {\n var desktop_navbar = [];\n\n if (_.settings.forum_branding_display) {\n desktop_navbar.push(\n m('a.navbar-brand', {href: _.router.url('misago:index')}, [\n m('img', {\n src: _.router.static_url('misago/img/site-logo.png'),\n alt: _.settings.forum_name\n }),\n _.settings.forum_branding_text\n ])\n );\n }\n\n return m('nav.navbar.navbar-default.navbar-static-top[role=\"navigation\"]', [\n m('.container.hidden-xs.hidden-sm', desktop_navbar)\n ]);\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.Conf = function(_) {\n _.settings = _.get(_.preloaded_data, 'SETTINGS', {});\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.Outlet = {\n factory: function(_) {\n if (_._outlet) {\n m.mount(document.getElementById(_._outlet),\n _.component(ns.ForumLayout));\n }\n },\n\n destroy: function(_) {\n if (_._outlet) {\n m.mount(_._outlet, null);\n }\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n var prefixUrl = function(prefix) {\n return function(url) {\n return prefix + url;\n };\n };\n\n var Router = function(_) {\n this.base_url = $('base').attr('href');\n\n // Media/Static url functions\n this.static_url = prefixUrl(_.get(_.preloaded_data, 'STATIC_URL', '/'));\n this.media_url = prefixUrl(_.get(_.preloaded_data, 'MEDIA_URL', '/'));\n };\n\n ns.RouterFactory = function(_) {\n return new Router(_);\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.has = function(obj, key) {\n if (obj !== undefined) {\n return obj.hasOwnProperty(key);\n } else {\n return false;\n }\n };\n\n ns.get = function(obj, key, value) {\n if (ns.has(obj, key)) {\n return obj[key];\n } else if (value !== undefined) {\n return value;\n } else {\n return undefined;\n }\n };\n\n ns.pop = function(obj, key, value) {\n var returnValue = ns.get(obj, key, value);\n if (ns.has(obj, key)) {\n delete obj[key];\n }\n return returnValue;\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.OrderedList = function(items) {\n this.is_ordered = false;\n this._items = items || [];\n\n this.add = function(key, item, order) {\n this._items.push({\n key: key,\n item: item,\n after: ns.get(order, 'after'),\n before: ns.get(order, 'before')\n });\n };\n\n this.get = function(key, value) {\n for (var i = 0; i < this._items.length; i++) {\n if (this._items[i].key === key) {\n return this._items[i].item;\n }\n }\n\n return value;\n };\n\n this.has = function(key) {\n return this.get(key) !== undefined;\n };\n\n this.values = function() {\n var values = [];\n for (var i = 0; i < this._items.length; i++) {\n values.push(this._items[i].item);\n }\n return values;\n };\n\n this.order = function(values_only) {\n if (!this.is_ordered) {\n this._items = this._order(this._items);\n this.is_ordered = true;\n }\n\n if (values_only || typeof values_only === 'undefined') {\n return this.values();\n } else {\n return this._items;\n }\n };\n\n this._order = function(unordered) {\n // Index of unordered items\n var index = [];\n unordered.forEach(function (item) {\n index.push(item.key);\n });\n\n // Ordered items\n var ordered = [];\n var ordering = [];\n\n // First pass: register items that\n // don't specify their order\n unordered.forEach(function (item) {\n if (!item.after && !item.before) {\n ordered.push(item);\n ordering.push(item.key);\n }\n });\n\n // Second pass: keep iterating items\n // until we hit iterations limit or finish\n // ordering list\n function insertItem(item) {\n var insertAt = -1;\n if (ordering.indexOf(item.key) === -1) {\n if (item.after) {\n insertAt = ordering.indexOf(item.after);\n if (insertAt !== -1) {\n insertAt += 1;\n }\n } else if (item.before) {\n insertAt = ordering.indexOf(item.before);\n }\n\n if (insertAt !== -1) {\n ordered.splice(insertAt, 0, item);\n ordering.splice(insertAt, 0, item.key);\n }\n }\n }\n\n var iterations = 200;\n while (iterations > 0 && index.length !== ordering.length) {\n iterations -= 1;\n unordered.forEach(insertItem);\n }\n\n return ordered;\n };\n };\n} (Misago.prototype));\n"],"sourceRoot":"/source/"}
|
|
|
+{"version":3,"sources":["misago.js"],"names":["window","Misago","ns","Object","getPrototypeOf","this","self","preloaded_data","SETTINGS","_services","addService","name","factory","order","push","item","after","get","before","_initServices","services","ordered_services","OrderedList","forEach","undefined","service_instance","_destroyServices","reverse","destroy","registerCoreServices","Conf","RouterFactory","Outlet","startRouting","component","arguments_array","i","arguments","length","m","apply","setup","init","fixture","in_test","persistent","el","isInit","context","retain","ForumLayout","view","ctrl","_","ForumNavbar","config","ForumFooter","prototype","IndexPage","legalPageFactory","type_name","default_title","controller","console","log","vm","container","loadingPage","TermsOfServicePage","gettext","PrivacyPolicyPage","Loader","setupMarkup","MisagoMarkup","content","trust","PageHeader","options","title","legalLink","legal_type","url","settings","router","href","FooterNav","isVisible","forum_footnote","terms_of_service","terms_of_service_link","privacy_policy","privacy_policy_link","indexOf","items","nav","FooterMisagoBranding","BrandFull","branding","children","src","staticUrl","alt","forum_name","desktop_navbar","forum_branding_display","forum_branding_text","route","mount","document","getElementById","Router","base_url","$","attr","urls","reverses","populatePatterns","urlconf","patterns","final_pattern","pattern","replace","mode","delegate_element","delegate_name","isSiteUrl","delegateClicks","element","on","e","target","siteUrl","preventDefault","off","prefixUrl","prefix","mediaUrl","has","obj","key","hasOwnProperty","value","pop","returnValue","is_ordered","_items","add","values","values_only","_order","unordered","insertItem","insertAt","ordering","ordered","splice","index","iterations","startsWith","string","beginning","endsWith","tail","UrlConfInvalidComponentError","message","UrlConf","_patterns","prefixPattern","include"],"mappings":"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","file":"misago.js","sourcesContent":["/* global -Misago */\n/* exported Misago */\n(function () {\n 'use strict';\n\n window.Misago = function() {\n\n var ns = Object.getPrototypeOf(this);\n var self = this;\n\n // Preloaded data\n this.preloaded_data = {\n // Empty settings\n SETTINGS: {}\n };\n\n // Services\n this._services = [];\n this.addService = function(name, factory, order) {\n this._services.push({\n name: name,\n item: factory,\n after: this.get(order, 'after'),\n before: this.get(order, 'before')\n });\n };\n\n this._initServices = function(services) {\n var ordered_services = new ns.OrderedList(services).order(false);\n ordered_services.forEach(function (item) {\n var factory = null;\n if (item.item.factory !== undefined) {\n factory = item.item.factory;\n } else {\n factory = item.item;\n }\n\n var service_instance = factory(self);\n if (service_instance) {\n self[item.name] = service_instance;\n }\n });\n };\n\n this._destroyServices = function(services) {\n var ordered_services = new ns.OrderedList(services).order();\n ordered_services.reverse();\n ordered_services.forEach(function (item) {\n if (item.destroy !== undefined) {\n item.destroy(self);\n }\n });\n };\n\n this.registerCoreServices = function() {\n this.addService('conf', ns.Conf);\n this.addService('router', ns.RouterFactory);\n this.addService('outlet', ns.Outlet);\n this.addService('start-routing', ns.startRouting);\n };\n\n // Component factory\n this.component = function() {\n var arguments_array = [];\n for (var i = 0; i < arguments.length; i += 1) {\n arguments_array.push(arguments[i]);\n }\n\n arguments_array.push(this);\n return m.component.apply(undefined, arguments_array);\n };\n\n // App init/destory\n this.setup = false;\n this.init = function(setup) {\n this.setup = {\n fixture: ns.get(setup, 'fixture', null),\n in_test: ns.get(setup, 'in_test', false)\n };\n\n this._initServices(this._services);\n };\n\n this.destroy = function() {\n this._destroyServices();\n };\n };\n}());\n\n\n(function (ns) {\n 'use strict';\n\n var persistent = function(el, isInit, context) {\n context.retain = true;\n };\n\n ns.ForumLayout = {\n view: function(ctrl, _) {\n return [\n _.component(ns.ForumNavbar),\n m('#router-fixture', {config: persistent}),\n _.component(ns.ForumFooter)\n ];\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.IndexPage = {\n view: function() {\n return [\n m('h1', 'Forum index page!'),\n m('p', 'Lorem ipsum dolor met sit amet elit.'),\n m('p', 'Sequar elit dolor nihi putto.')\n ];\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n var legalPageFactory = function(type_name, default_title) {\n return {\n controller: function() {\n console.log('controller!');\n },\n vm: function() {\n\n },\n view: function() {\n var _ = this.container;\n\n if (true) {\n return ns.loadingPage(_);\n } else {\n return m('.page.page-legal.page-legal-' + type_name.replace('_', '-'), [\n _.component(ns.PageHeader, {title: ns.get(_.settings, type_name + '_title', default_title)}),\n m('p', 'Si pacem sequar elit bellum nihi equit.')\n ]);\n }\n }\n };\n };\n\n ns.TermsOfServicePage = legalPageFactory(\n 'terms_of_service', gettext('Terms of service'));\n ns.PrivacyPolicyPage = legalPageFactory(\n 'privacy_policy', gettext('Privacy policy'));\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.Loader = {\n view: function() {\n return m('.loader.sk-folding-cube', [\n m('.sk-cube1.sk-cube'),\n m('.sk-cube2.sk-cube'),\n m('.sk-cube4.sk-cube'),\n m('.sk-cube3.sk-cube')\n ]);\n }\n };\n} (Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n var setupMarkup = function(el, isInit, context) {\n context.retain = true;\n };\n\n ns.MisagoMarkup = {\n view: function(ctrl, content) {\n return m('article.misago-markup', {config: setupMarkup}, m.trust(content));\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.PageHeader = {\n view: function(ctrl, options) {\n return m('.page-header',\n m('.container', [\n m('h1', options.title),\n ])\n );\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n var legalLink = function(_, legal_type, default_title) {\n var url = ns.get(_.settings, legal_type + '_link');\n if (!url && ns.get(_.settings, legal_type)) {\n url = _.router.url(legal_type);\n }\n\n if (url) {\n return m('li',\n m('a', {href: url}, ns.get(_.settings, legal_type + '_title', default_title))\n );\n } else {\n return null;\n }\n };\n\n ns.FooterNav = {\n isVisible: function(settings) {\n return [\n !!settings.forum_footnote,\n !!settings.terms_of_service,\n !!settings.terms_of_service_link,\n !!settings.privacy_policy,\n !!settings.privacy_policy_link\n ].indexOf(true) !== -1;\n },\n view: function(ctrl, _) {\n var items = [];\n\n if (_.settings.forum_footnote) {\n items.push(m('li.forum-footnote', m.trust(_.settings.forum_footnote)));\n }\n\n items.push(legalLink(_, 'terms_of_service', gettext('Terms of service')));\n items.push(legalLink(_, 'privacy_policy', gettext('Privacy policy')));\n\n return m('ul.list-inline.footer-nav', items);\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.ForumFooter = {\n view: function(ctrl, _) {\n var nav = null;\n if (ns.FooterNav.isVisible(_.settings)) {\n nav = _.component(ns.FooterNav);\n }\n\n return m('footer.forum-footer', [\n m('.container',\n m('.footer-content', [\n nav,\n _.component(ns.FooterMisagoBranding)\n ])\n )\n ]);\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.FooterMisagoBranding = {\n view: function() {\n return m('a.misago-branding[href=http://misago-project.org]', [\n \"powered by \", m('strong', \"misago\")\n ]);\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.BrandFull = {\n view: function(ctrl, branding, _) {\n var children = [\n m('img', {\n src: _.router.staticUrl('misago/img/site-logo.png'),\n alt: _.settings.forum_name\n })\n ];\n\n if (branding) {\n children.push(branding);\n }\n\n return m('a.navbar-brand', {href: _.router.url('index')}, children);\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.ForumNavbar = {\n view: function(ctrl, _) {\n var desktop_navbar = [];\n\n if (_.settings.forum_branding_display) {\n desktop_navbar.push(_.component(ns.BrandFull, _.settings.forum_branding_text));\n }\n\n desktop_navbar.push(m('ul.nav.navbar-nav', [\n m('li', m(\"a\", {config: m.route, href: _.router.url('index')}, 'Index')),\n m('li', m(\"a\", {config: m.route, href: _.router.url('test')}, 'Test'))\n ]));\n\n return m('nav.navbar.navbar-default.navbar-static-top[role=\"navigation\"]', [\n m('.container.navbar-full.hidden-xs.hidden-sm', desktop_navbar)\n ]);\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.Conf = function(_) {\n _.settings = ns.get(_.preloaded_data, 'SETTINGS', {});\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.Outlet = {\n factory: function(_) {\n if (_.setup.fixture) {\n m.mount(document.getElementById(_.setup.fixture),\n _.component(ns.ForumLayout));\n }\n },\n\n destroy: function(_) {\n if (_.setup.fixture) {\n m.mount(_.setup.fixture, null);\n }\n }\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n var Router = function(_) {\n var self = this;\n this.base_url = $('base').attr('href');\n\n // Routing\n this.urls = {};\n this.reverses = {};\n\n var populatePatterns = function(urlconf) {\n urlconf.patterns().forEach(function(url) {\n // set service container on component\n url.component.container = _;\n\n var final_pattern = self.base_url + url.pattern;\n final_pattern = final_pattern.replace('//', '/');\n\n self.urls[final_pattern] = url.component;\n self.reverses[url.name] = final_pattern;\n });\n };\n\n this.startRouting = function(urlconf, fixture) {\n populatePatterns(urlconf);\n\n m.route.mode = 'pathname';\n m.route(fixture, '/', this.urls);\n };\n\n this.url = function(name) {\n return this.reverses[name];\n };\n\n // Delegate clicks\n this.delegate_element = null;\n this.delegate_name = 'click.misago-router';\n\n this.isSiteUrl = function(url) {\n return false;\n };\n\n this.delegateClicks = function(element) {\n this.delegate_element = element;\n $(this.delegate_element).on(this.delegate_name, 'a', function(e) {\n var url = e.target.href;\n if (siteUrl(url)) {\n m.route(url);\n e.preventDefault();\n }\n });\n };\n\n this.destroy = function() {\n $(this.delegate_element).off(this.delegate_name);\n };\n\n // Media/Static url\n var prefixUrl = function(prefix) {\n return function(url) {\n return prefix + url;\n };\n };\n\n this.staticUrl = prefixUrl(_.get(_.preloaded_data, 'STATIC_URL', '/'));\n this.mediaUrl = prefixUrl(_.get(_.preloaded_data, 'MEDIA_URL', '/'));\n };\n\n ns.RouterFactory = function(_) {\n return new Router(_);\n };\n\n ns.startRouting = function(_) {\n _.router.startRouting(ns.urls, document.getElementById('router-fixture'));\n _.router.delegateClicks(document.getElementById(_.setup.fixture));\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.has = function(obj, key) {\n if (obj !== undefined) {\n return obj.hasOwnProperty(key);\n } else {\n return false;\n }\n };\n\n ns.get = function(obj, key, value) {\n if (ns.has(obj, key)) {\n return obj[key];\n } else if (value !== undefined) {\n return value;\n } else {\n return undefined;\n }\n };\n\n ns.pop = function(obj, key, value) {\n var returnValue = ns.get(obj, key, value);\n if (ns.has(obj, key)) {\n delete obj[key];\n }\n return returnValue;\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.OrderedList = function(items) {\n this.is_ordered = false;\n this._items = items || [];\n\n this.add = function(key, item, order) {\n this._items.push({\n key: key,\n item: item,\n after: ns.get(order, 'after'),\n before: ns.get(order, 'before')\n });\n };\n\n this.get = function(key, value) {\n for (var i = 0; i < this._items.length; i++) {\n if (this._items[i].key === key) {\n return this._items[i].item;\n }\n }\n\n return value;\n };\n\n this.has = function(key) {\n return this.get(key) !== undefined;\n };\n\n this.values = function() {\n var values = [];\n for (var i = 0; i < this._items.length; i++) {\n values.push(this._items[i].item);\n }\n return values;\n };\n\n this.order = function(values_only) {\n if (!this.is_ordered) {\n this._items = this._order(this._items);\n this.is_ordered = true;\n }\n\n if (values_only || typeof values_only === 'undefined') {\n return this.values();\n } else {\n return this._items;\n }\n };\n\n this._order = function(unordered) {\n // Index of unordered items\n var index = [];\n unordered.forEach(function (item) {\n index.push(item.key);\n });\n\n // Ordered items\n var ordered = [];\n var ordering = [];\n\n // First pass: register items that\n // don't specify their order\n unordered.forEach(function (item) {\n if (!item.after && !item.before) {\n ordered.push(item);\n ordering.push(item.key);\n }\n });\n\n // Second pass: keep iterating items\n // until we hit iterations limit or finish\n // ordering list\n function insertItem(item) {\n var insertAt = -1;\n if (ordering.indexOf(item.key) === -1) {\n if (item.after) {\n insertAt = ordering.indexOf(item.after);\n if (insertAt !== -1) {\n insertAt += 1;\n }\n } else if (item.before) {\n insertAt = ordering.indexOf(item.before);\n }\n\n if (insertAt !== -1) {\n ordered.splice(insertAt, 0, item);\n ordering.splice(insertAt, 0, item.key);\n }\n }\n }\n\n var iterations = 200;\n while (iterations > 0 && index.length !== ordering.length) {\n iterations -= 1;\n unordered.forEach(insertItem);\n }\n\n return ordered;\n };\n };\n} (Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.startsWith = function(string, beginning) {\n return string.indexOf(beginning) === 0;\n };\n\n ns.endsWith = function(string, tail) {\n return string.indexOf(tail, string.length - tail.length) !== -1;\n };\n}(Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.UrlConfInvalidComponentError = function() {\n this.message = 'component argument should be array or object';\n };\n\n ns.UrlConf = function() {\n var self = this;\n this._patterns = [];\n\n this.patterns = function() {\n return this._patterns;\n };\n\n var prefixPattern = function(prefix, pattern) {\n return (prefix + pattern).replace('//', '/');\n };\n\n var include = function(prefix, patterns) {\n for (var i = 0; i < patterns.length; i ++) {\n self.url(prefixPattern(prefix, patterns[i].pattern),\n patterns[i].component,\n patterns[i].name);\n }\n };\n\n this.url = function(pattern, component, name) {\n if (typeof component !== 'object') {\n throw new ns.UrlConfInvalidComponentError();\n }\n\n if (pattern === '') {\n pattern = '/';\n }\n\n if (component instanceof ns.UrlConf) {\n include(pattern, component.patterns());\n } else {\n this._patterns.push({\n pattern: pattern,\n component: component,\n name: name\n });\n }\n };\n };\n} (Misago.prototype));\n\n(function (ns) {\n 'use strict';\n\n ns.loadingPage = function(_) {\n return m('.page.page-loading', _.component(ns.Loader));\n };\n} (Misago.prototype));\n\n(function (ns, UrlConf) {\n 'use strict';\n\n var urls = new UrlConf();\n urls.url('/', ns.IndexPage, 'index');\n\n // Legal pages\n urls.url('/terms-of-service/', ns.TermsOfServicePage, 'terms_of_service');\n urls.url('/privacy-policy/', ns.PrivacyPolicyPage, 'privacy_policy');\n\n ns.urls = urls;\n} (Misago.prototype, Misago.prototype.UrlConf));\n"],"sourceRoot":"/source/"}
|